iOS-即时通讯
一般来说,即时通讯有两种方式
WebSocket
与Ajax
的选择
在WebSocket
出来之前,实现即时通讯通常使用Ajax
来实现,而Ajax
是通过轮询的方式进行实时数据的获取,轮询就是在指定的时间间隔内,进行HTTP 请求来获取数据,而这种方式会产生一些弊端,一方面产生过多的HTTP请求,占用带宽,增大服务器的相应,浪费资源,另一方面,因为不是每一次请求都会有数据变化(就像聊天室),所以就会造成请求的利用率低。
而WebSocket
正好能够解决上面的弊端,WebSocket
是客户端与服务器之前专门建立一条通道,请求也只请求一次,而且可以从同道中实时的获取服务器的数据,所以当应用到实时的应用上时,WebSocket
是一个很不错的选择。
Ajax 轮询方式本文就不作详细介绍
WebSocket 协议名
WebSocket的链接不是以http或https开头的,而是以ws和wss开头的,这里需要注意一下。
- iOS原声并不能完美支持WebSocket建立长连接。因此这里我们需要用到SocketRocket
第三方库,由facebook开源的组件。
这个组件能够完美的兼容webSocket的链接
具体使用方法可参考 iOS websocket接入
注意点
- 需要设置单例,防止内存无限增大。
- 需要保活,防止服务端自动断开长连接
- 使用前需要先提供长连接地址wss://
- 使用demo也可参考 iOS websocket接入一文中提供的demo地址