WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。
区别于MQTT、XMPP等聊天的应用层协议,它是一个传输通讯协议。它有着自己一套连接握手,以及数据传输的规范。
而本文要讲到的SRWebSocket就是iOS中使用websocket必用的一个框架,它是用Facebook提供的。
关于WebSocket起源与发展,是怎么由:轮询、长轮询、再到websocket的,可以看看冰霜这篇文章:
微信,QQ这类IM app怎么做——谈谈Websocket
大家可以关注小编的群:656315826 可以获取相关视频教程和源码哦
二. SRWebSocket的对外的业务流程:
首先贴一段SRWebSocket的API调用代码:
要简单使用起来,总共就4行代码,并且实现你需要的代理即可,整个业务逻辑非常简洁。
但是就这么几个对外的方法,SRWebSocket.m里面用了2000行代码来进行封装,那么它到底做了什么?我们接着往下看:
三. SRWebSocket的初始化以及连接流程:
1首先我们初始化:
会初始化一些属性:
包括对schem进行断言,只支持ws/wss/http/https四种。
当前socket状态,是正在连接,还是已连接、断开等等。
初始化工作队列,以及流回调线程等等。
初始化读写缓冲区:_readBuffer、_outputBuffer。
2. 输入输出流的创建及绑定:
在这里,我们根据传进来的url,类似ws://localhost:80,进行输入输出流CFStream的创建及绑定。
[图片上传失败...(image-677c80-1534401345579)]
到这里,初始化工作就完成了,接着我们调用了open开始建立连接:
open方法定义了一个超时,如果超时了还在SR_CONNECTING,则报错,并且断开连接,清除一些已经初始化好的参数。
开始连接主要是给输入输出流绑定了一个runloop,说到这个runloop,不得不提一下SRWebSocket线程的问题:
一开始初始化我们提过SRWebSocket有一个工作队列: