1. 什么叫做通信协议?
这个问题源自于最近的项目,第一次接触IM项目,并且对网络方面的知识也不是特别的熟悉,在头脑风暴的时候,留下的问题。
在我来想,IM的关键是去解决如何缓存用户长连接这个事情,但是其实后来才知道这只是其中的一小部分。
中间与客户端讨论最多的是定协议,而讨论了很久我也没有明白他们口中的协议是什么意思,总觉得我们说话不在一个频道上。
最终脑子里留下了一个很大的问号,什么是XMPP协议、什么是MQTT协议、什么叫自定义协议?他们和TCP、websocket、HTTP有什么关系?
确切的说,XMPP协议、MQTT协议、websocket、HTTP、TCP他们之间的关系是什么?
1.1. TCP
从TCP说起,这些协议都是基于TCP来的。而自定义协议也是说的意思是基于TCP来自定义协议。
再往上HTTP与Websocket,HTTP其实就是我们最常使用的,它本质是是一种命令式的。只有客户端发送指令,服务器根据客户端发送的指令进行处理应答。
这个最大的问题就是在实时性上,在websocket没有出现之前,只能通过客户端轮询的方式去达到伪实时。
1.2. websocket
为了解决这个问题,诞生出websocket,它解决的问题是:
- 维持长连接,这样节省了HTTP冗长的header
- 服务器可以向客户端推送消息
注意:Websocket连接建立还是使用的HTTP请求。
1.3. XMPP协议
也是基于TCP而来,他是定义了一套标准的即时通讯的规范。传输的文本协议的定义都是使用的XML的方式来定义的,所以这也是诟病最多的地方,网络带宽消耗太大,是一个PC时代的IM协议。
即时通讯规范是什么意思?
- 弱网状态下,信息传输
- 长连接断开的回调
- 消息的重试机制
- 等等…
这是一系列的问题,而这套协议中包含了所有的处理逻辑,开发者不需要关心网络问题只需要通过封装好的API去调用即可,其实是对客户端最大限度的简化,标准化,也就是说有现成的实现。
而服务器,这只是一个协议,实现上并不管如何实现,所以XMPP服务器其实现在市面上开源的并不算特别的好。真正比较好的都是闭源赚钱了。
1.4. MQTT协议
MQTT全称是Message Queuing Telemetry Transport。
MQTT[1]消息队列遥测传输(英语:Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)[2]下基于发布 (Publish)/订阅 (Subscribe)范式的消息协议,可视为“数据传递的桥梁”[3]它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件,以解决当前繁重的数据传输协议,如:HTTP。 [4] IBM公司的安迪·斯坦福-克拉克及Arcom公司的阿兰·尼普于1999年撰写了该协议的第一个版本 —— wiki
从介绍可以看出,MQTT本来解决的场景是远程控制设备的,现在更多的应用在物联网上,其实还挺亲切的,因为我的第一份工作做物联网当时就接触到了MQTT,当然知道还很少,以至于误会以为MQTT是基于websocket。
相比与XMPP主要特定是协议简洁,传输效率高,信息冗余小。基于订阅发布者模式。
当然因为不是专门为IM而设计的协议,所以还需要根据IM的特性去灵活的应用MQTT server。
其实可以直接将其当做一个长连接服务器,剩下的其他业务由我们自己来开发。这也算是一个重要的技术问题解决了。
2. 总结协议是什么意思?
协议是解决一个特定场景问题,所指定的标准。考虑到了此场景下各种可能出现的问题,有了标准就可以两端(服务端/客户端)分别开发。