IM Introduction

The record related to IM

Posted by Gao Fei on November 27, 2017

IM 即时通讯技术 介绍

应用场景

即时通信的常用应用场景:即实时性要求高的场景,常见的如下: 视频会议、聊天、私信 弹幕、抽奖 互动游戏 协同编辑 股票基金实时报价、体育实况更新、 基于位置的应用:Uber、滴滴司机位置 在线教育 智能家居

基本的发展阶段

轮询-》长轮询-》长连接

注意长短连接与长短轮询的区别 概念范畴:长短轮询是应用层概念、长短连接是传输层概念 协商方式:一个 TCP 连接是否为长连接,是通过设置 HTTP 的 Connection Header 来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。 实现方式:连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的

数据传输格式

自定义二进制 开源协议:protocol buffers 文本协议(json\xml)

常见的实现方式

  1. 基于Scoket:代表框架:CocoaAsyncSocket
  2. 基于WebScoket: SocketRocket
  3. 基于MQTT: MQTTKit
  4. 基于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