今天来讲讲熟悉的WebSocket, 首先WebSocket是web通信方式的一种,像我们熟知的HTTP协议也是web通信方式的一种。但是我们知道HTTP协议是一种无状态的协议,其服务端本身不具备识别客户端的能力,必须借助外部的一些信息比如说session和cookie,才能与特定的客户端保持通信。也就是说我们所发送的每一个HTTP的请求都会带上请求头中一些相应的信息还有cookie,这明显会增加我们传输的信息的体量从而带来一定的网络延迟,对于一些对通信的实时性要求比较高的应用来说就是不可忍受的了,比如说聊天程序或者是运行在浏览器中的实时小游戏。最郁闷的却还是这些头信息和cookie往往对于服务器响应客户端的请求来说是多余的,也就是说虽然我每个请求都带了这些信息,但是服务器与客户端的交互过程中可能根本用不上这些信息。
为了改善HTTP请求的这种网络延迟的情况,也出现了一些适应不同需求的其他的[web通信]方式,比如说:轮询,长轮询(long-polling),数据流,EventSouce等等,WebSocket便是其中一种。
实际上大多数基于因特网(或者局域网)的网络链接通常都包含长连接和基于TCP套接字的双向消息交换。但是TCP协议是属于最底层的网络通信协议了,让一些不能信任的客户端脚本去访问底层的TCP套接字显然是不太安全的,因此WebSocket实现了一种较为安全的方案,它允许客户端脚本在客户端和支持WebSocket协议的服务器之间创建双向的套接字连接。从而使实时通信的某些网络操作变得简单。
1.2 WebSocket是如何工作的?
我们知道了WebSocket的主要作用是,允许服务器端与客户端进行全双工(full-duplex)的实时通信。这里有个例子特别好:HTTP协议像发电子邮件,发出后必须等待对方回信;WebSocket则是像打电话,服务器端和客户端可以同时向对方发送数据,它们之间存着一条持续打开的数据通道。
关于WebSocket先简单就说这些了,相关详细资料请参考扩展阅读;接着实现iOS端WebSocket通讯。
好了 直接上代码:(至于怎么使用pod还是什么导入框架我就不说了,其实使用三方库连接socket很简单,基本满足日常使用了)
首先集成framework之后导入#import "SRWebSocket.h"
我们进去SRWebSocket里面看看
初始化的方式这几种 不过我这项目比较简单直接使用url就可以 。
上正文
url直接连接端口就行 这样设置delegate之后 就在代理的监听方法里面做收到服务器请求之后的操作吧
第一次请求服务器成功在webSocketDidOpen里面 这里面做你想做的操作(注册)
我们这是这样告诉我服务器我是谁 这个项目刚开始 还没做加密处理 如果做加密的话请求直接 带着返回的token就可以了,(我们直播做了加密 这边只是简单聊天和监控就没做)
如果请求没成功的话
-
(void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error{
NSLog(@"didFailWithError");
}
在这里面一般是重复请求或者直接断掉 看你们需求了
好了 基本就这样了 简单的socket请求就完事了 简单么?给个赞吧