iOS SRWebSocket原理分析及API使用

以前浏览器实现即时通讯是通过轮询(long poll 和 ajax)技术解决,但是有很大的弊端,比如通讯延时、流量浪费等。直到WebSocket出现才有助于解决这一问题。

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
WebSocket和HTTP、FTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP/IP之上的。
在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。
连接的过程是:
首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。

下面介绍一下基于WebSocket的开源的即时通讯框架SRWebSocket的API使用。

首先要导入webSocket的包,git下载地址https://github.com/square/SocketRocket

1,在需要的类引入#import “SRWebSocket.h”;
2,初始化开始连接:

SRWebSocket * tempWebSocket = [[SRWebSocket alloc] initWithURLRequest:request];

    _webSocket = tempWebSocket;

    _webSocket.delegate = self;

    [_webSocket open];

3,连接成功后会调用代理方法didOpen,需要实现SRWebSocketDelegate代理的几个方法:

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;

其中didReceiveMessage会返回收到的消息;
4,发送消息:

 [_webSocket send:(id)data];

5、关闭webSocket连接:

[_webSocket close];

然后在代理方法didCloseWithCode设置:

_webSocket.delegate = nil;
_webSocket = nil;

至此,大功告成!

你可能感兴趣的:(iOS,WebSocket,即时通讯,html5)