即时通讯协议选型:WebSocket协议( 二 )


1.减轻服务器的负担 2.极大地减少不必要的流量、电量消耗 3.提高实时性,保证客户端和服务端数据的同步 4.减少冗余请求头造成的开销

即时通讯协议选型:WebSocket协议

文章插图
 
即时通讯协议选型:WebSocket协议

文章插图
 
除了WebSocket,实现移动端即时通讯的还有哪些技术?
  • XMPP 全称(Extensible Messaging and Presence Protocol,可扩展通讯和表示协议),是一种基于XML的协议,它继承了在XML环境中灵活的发展性 。XMPP中定义了三个角色,客户端,服务器,网关 。通信能够在这三者的任意两个之间双向发生 。服务器同时承担了客户端信息记录,连接管理和信息的路由功能 。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等 。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML 。优点 1.超强的可扩展性 。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求 。2.易于解析和阅读 。方便了开发和查错 。3.开源 。在客户端、服务器、组件、源码库等方面,都已经各自有多种实现 。缺点 1.数据负载太重 。过多的冗余标签、低效的解析效率使得XMPP在移动设备上表现不佳 。
 
【更多音视频学习资料,点击下方链接免费领取↓↓,先码住不迷路~】
点击领取→音视频开发基础知识和资料包
 
应用场景举例:点对点单聊约球 我刚毕业时入职的公司曾接手开发一个线上足球约战的社交平台App项目,当时为了提高约球时的沟通效率,考虑为应用引入聊天模块,并优先实现点对点单聊功能 。那时市面上的即时通讯SDK方案还尚未成熟,综合当时团队成员的技术栈,决定采用XMPP+Openfire+Smack作为自研技术搭建聊天框架 。Openfire基于XMPP协议,采用Java开发,可用于构建高效的即时通信服务器端,单台服务器可支持上万并发用户 。Openfire安装和使用都非常简单,并利用Web进行管理 。由于是采用开放的XMPP协议,因此可以使用各种支持XMPP协议的IM客户端软件登录服务 。Smack是一个开源的、易于使用的XMPP客户端Java类库,提供了一套可扩展的API 。
  • MQTT 全称(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅模式的“轻量级”通讯协议,其构建于TCP/IP协议之上 。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务 。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用 。特点 1.基于发布/订阅模型 。提供一对多的消息发布,解除应用程序耦合 。2.低开销 。MQTT客户端很轻巧,只需要最少的资源,同时MQTT消息头也很小,可以优化网络带宽 。3.可靠的消息传递 。MQTT定义了3种消息发布服务质量,以支持消息可靠性:至多一次,至少一次,只有一次 。4.对不可靠网络的支持 。专为受限设备和低带宽、高延迟或不可靠的网络而设计 。
应用场景举例:赔率更新、赛事直播聊天室 我第二家入职的公司的主打产品是一款提供模拟竞猜、赛事直播的体育类APP,其中核心的功能模块就是提供各种赛事的最新比分赔率数据,最初采用的即是上文所说的低效的HTTP轮询方案,效果可想而知 。后面技术重构后改用了MQTT,极大地减少了对网络环境的依赖,提高了数据的实时性和可靠性 。再往后搭建直播模块时,考虑到聊天室这种一对多的消息发布场景同样适合用MQTT解决,于是沿用了原先的技术方案扩展了新的聊天室模块 。
  • WebSocket 而相较之下,WebSocket的特点包括: 1.**较少的控制开销 。**在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小 。2.**更好的二进制支持 。**Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容 。3.**可以支持扩展 。**Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议,如以上所说的XMPP协议、MQTT协议等 。
WebSocket协议在Android客户端的实现 
实现WebSocket协议很简单,广为Android开发者使用的网络请求框架——OkHttp对WebSocket通信流程进行了封装,提供了简明的接口用于WebSocket的连接建立、数据收发、连接保活、连接关闭等,使我们可以专注于业务实现而无须关注通信细节,简单到我们只需要实现以下两步:


推荐阅读