一些应用只是使用了HTTP编程,也就是只用了AFNetworking。 但是听说IM类的应用需要使用到socket,是为什么呢?
光阴似箭催人老,日月如移越少年。
http是一次性的,socket可以实现长连接,凡是一个来回网络请求解决不了问题的都会用socket。比如微信里刷新朋友圈、下载图片用http请求,收消息因为这边不知道什么时候来消息就搞个socket一直监听,发消息因为会比较频繁用http每次都要重新握手所以也要用socket,还有音视频通话,断点续传等等都要用socket。理论上启动微信或断网重连后的同步消息可以用http去请求没有收到的消息,但是因为诸多原因也是用socket。
当然我上面说的只是最基本的原因,用socket还有非常多的原因是http实现不了的。凡是http能实现的,socket都能实现,因为http也只是socket via tcp的一种应用场景的协议。
IM大都是在socket基础上自己搞的一套传输协议,类似http,只不过是针对自己的业务开发的。
IM应用服务器为了获取用户登录状态要不停地发送“心跳包”确认用户在线和用户的网络情况,用HTTP的话会有太多冗余信息(HEADER,CONTENT-TYPE,STATUS)之类的。
很多IM应用为了安全性或者压缩数据会实现自己的网络协议。
http是一次性的,socket可以实现长连接,凡是一个来回网络请求解决不了问题的都会用socket。
比如微信里刷新朋友圈、下载图片用http请求,收消息因为这边不知道什么时候来消息就搞个socket一直监听,发消息因为会比较频繁用http每次都要重新握手所以也要用socket,还有音视频通话,断点续传等等都要用socket。理论上启动微信或断网重连后的同步消息可以用http去请求没有收到的消息,但是因为诸多原因也是用socket。
当然我上面说的只是最基本的原因,用socket还有非常多的原因是http实现不了的。
凡是http能实现的,socket都能实现,因为http也只是socket via tcp的一种应用场景的协议。
IM大都是在socket基础上自己搞的一套传输协议,类似http,只不过是针对自己的业务开发的。
IM应用服务器为了获取用户登录状态要不停地发送“心跳包”确认用户在线和用户的网络情况,用HTTP的话会有太多冗余信息(HEADER,CONTENT-TYPE,STATUS)之类的。
很多IM应用为了安全性或者压缩数据会实现自己的网络协议。