IM 即时通讯技术 介绍
应用场景
即时通信的常用应用场景:即实时性要求高的场景,常见的如下: 视频会议、聊天、私信 弹幕、抽奖 互动游戏 协同编辑 股票基金实时报价、体育实况更新、 基于位置的应用:Uber、滴滴司机位置 在线教育 智能家居
基本的发展阶段
轮询-》长轮询-》长连接
注意长短连接与长短轮询的区别 概念范畴:长短轮询是应用层概念、长短连接是传输层概念 协商方式:一个 TCP 连接是否为长连接,是通过设置 HTTP 的 Connection Header 来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。 实现方式:连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的
数据传输格式
自定义二进制 开源协议:protocol buffers 文本协议(json\xml)
常见的实现方式
- 基于Scoket:代表框架:CocoaAsyncSocket
- 基于WebScoket: SocketRocket
- 基于MQTT: MQTTKit
- 基于XMPP: XMPPFramework
名称 | 协议举例 | 优点 | 缺点 |
---|---|---|---|
Socket | Socket+protocol buffers | ||
WebScoket | WebScoket+json | 高效、节约流量(比如使用protocol buffers,或压缩json格式),ios Android web三端通用 | 对设计者要求高 |
MQTT | 协议简单,流量少、订阅+推送模式 | 并不是专门为IM设计的协议,多用于推送 | |
XMPP | Scoket+xml | 开源、可扩展性强、方便接入 | XML表现力差、额外信息多、流量耗费大 |
重连机制
TCP KeepAlive机制 | 心跳机制 | |
---|---|---|
检测连接的状态 | 检测通信双方的存活状态 | |
在定时的时间(一般为7200s)到后, 发送相应的KeepAlive探针, | ||
失败后重试10次,每次超时时间75s | 通常可设置3-5min发Ping |