WebSocket
WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:WebSocket 是一种双向通信协议.
由于项目需要创建一个聊天室,需要通过长链接,和后台保持通讯,进行聊天,并且实时进行热点消息的推送.
目前Facebook的SocketRocket应该是目前最好的关于SocketRocket使用的框架了.而且简单易用.
使用
一般一个项目在启动后的某个时机会启动创建一个长链接,如果需要多个就多次创建.如果只要一个就可以封装为一个单例,全局使用.
可以使用podpod管理库, 在podfile中加入
pod 'SocketRocket'
在使用命令行工具cd到当前工程 安装
pod install
导入头文件后即可使用.
为求稳定,我的做法是copy的FaceBook里SocketRocket库到项目里. -->SocketRocket地址
1.首先创建一个名为WebSocketManager的单例类,
+(instancetype)shared;
2.创建一个枚举,分别表示WebSocket的链接状态
typedef NS_ENUM(NSUInteger,WebSocketConnectType){ WebSocketDefault = 0, //初始状态,未连接,不需要重新连接 WebSocketConnect, //已连接 WebSocketDisconnect //连接后断开,需要重新连接 };
3.创建连接
//建立长连接 - (void)connectServer;
4.处理连接成功的结果;
-(void)webSocketDidOpen:(RMWebSocket *)webSocket; //连接成功回调
5.处理连接失败的结果
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;//连接失败回调
6.接收消息
///接收消息回调,需要提前和后台约定好消息格式. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(nonnull NSString *)string
7.关闭连接
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;///关闭连接回调的代理
8.为保持长链接的连接状态,需要定时向后台发送消息,就是俗称的:心跳包.
需要创建一个定时器,固定时间发送消息.
9.链接断开情况处理:
首先判断是否是主动断开,如果是主动断开就不作处理.
如果不是主动断开链接,需要做重新连接的逻辑.
具体代码如下:
WebSocketManager.h 中的代码