一、业务场景
需要实时的获取后台的数据,后端会根据用户本地推送一些相关内容;通过和后台的讨论确定使用websocket
来解决问题;
通过比较决定使用SocketRocket
,自己根据库封装了工具 WebSocketManager
,具体的库代码可以到gitee下载;代码下载地址:https://gitee.com/xzqxzq/web-socket.git
二、具体使用
- 2.1 在
appDelegate.m
中,APP
进入前台的时候建立连接,APP
进入后台的时候关闭连接
// APP进入前台
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[WebSocketManager shared] closeWebServiceByUser];
}
// APP进入后台
- (void)applicationDidBecomeActive:(UIApplication *)application {
if ([WebSocketManager shared].connectType == WebSocketDisconnect || [WebSocketManager shared].connectType == WebSocketDefault) {
[[WebSocketManager shared] connectServer];
}
}
- 2.2 在收到socket消息后,根据消息内容进行页面展示UI即可;或者发出通知在指定页面进行处理相关逻辑;
- (void)getMessageForSocket:(NSNotification *)notification {
NSDictionary *userData = notification.userInfo;
NSLog(@"获取到的socket数据-%@",userData);
}
三、注意事项
- 3.1在使用的时候,自己做了简单的封装,添加了无网检测,断线重连和心跳机制(如果需要的话,心跳包标识需要和后台进行确定)
- 3.2 在使用的时候 需要替换
WebSocketManager.m
文件里面的服务器url
为自己的服务器url
//初始化 WebSocket
- (void)initWebSocket{
NSURL *zangUrl = [NSURL URLWithString:@"ws://139.198.36.10:574/ws/vox/v1/stream_asr"];
NSURL *hanUrl = [NSURL URLWithString:@"ws://139.198.36.10:574/ws/vox/v1/stream_asr"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:isHan?hanUrl:zangUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];
if (self.socket) {
self.socket.delegate = nil;
[self.socket close];
_socket = nil;
}
_socket = [[SRWebSocket alloc] initWithURLRequest:request];
_socket.delegate = self;
[_socket open];
}
- 3.3 详细内容请查看
git
代码,如有问题欢迎留言探讨👉👉👉