IM客户端消息推送的几种方式及特点-阿里云开发者社区

开发者社区> 皮皮酱ye> 正文

IM客户端消息推送的几种方式及特点

简介: 提起消息推送一般人们会经常提起的有以下几种:1.轮询顾名思义,客户端定期去向服务端询问是否有新的消息,简单点说就是服务端不关心客户端的地址是什么,客户端来询问,直接告诉它就行。这种方案最简单,但是却不适用于即时通讯产品,因为即时通讯软件的消息传递机制与一般的消息推送的区别就在即时这点,如果采用轮询的方式,客户端每几秒就连一次服务器,对于手机电量与流量的消耗是很大的。
+关注继续查看

提起消息推送一般人们会经常提起的有以下几种:
1.轮询
顾名思义,客户端定期去向服务端询问是否有新的消息,简单点说就是服务端不关心客户端的地址是什么,客户端来询问,直接告诉它就行。这种方案最简单,但是却不适用于即时通讯产品,因为即时通讯软件的消息传递机制与一般的消息推送的区别就在即时这点,如果采用轮询的方式,客户端每几秒就连一次服务器,对于手机电量与流量的消耗是很大的。
2.XMPP
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。它的系统结构如下图所示:
1

但是它也有两个致命的缺点:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。它的另一个缺点是由于XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。

3.MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议。它的PUSH结构示意图如下图所示:
2

MQTT由于开放源代码,耗电量小等特点,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都是不错的方案。在手机移动端的消息推送也是备选的方案之一。但是它的设计初衷是为:大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的。而且他的实现比较复杂,服务端组件rsmb不开源,所以MQTT更适合于物联网端的通信。

4.长连接
所谓长连接指建立SOCKET连接后不管是否使用都保持连接。当然有人会问长连接定时发送心跳,这和轮询有什么区别?手机休眠状态下连接会不会断掉等。
在这之前先来了解一下一些相关的概念。心跳包的作用:有人可能会觉得心跳包是用来通知服务端,客户端当前的状态。这种说法固然没错,但是本质是心跳包的主要作用是防止NAT超时,其次是检查连接是否断开。NAT是为了解决IP数量不足的问题而做的一种网络地址的转换。简单讲就是运营商的网关需要维护一个外网IP与内网IP及端口之间的一种映射关系。当前的移动网络运营商在一定时间段内数据链路没有数据通讯时,会更新NAT表中的映射关系,造成链路中断。具体的NAT穿越等细节不在此讨论。
所以,可以粗略的认为心跳包的一个作用就是为了解决NAT中断的问题。但是心跳包发送的间隔时间必须要小于NAT超时的时间,这样才能保证链路的不中断。
下面简单阐述一下心跳包与轮询的区别,以此来说明长连接方案比轮询方案的优势。轮询与心跳本质的不同是轮询的目的是为了从服务端得到数据,而心跳是为了保持连接。而且轮询比心跳更耗电,轮询要经过TCP的三次握手,但是单次心跳缺不需要这样。
最后一个问题,手机休眠状态下连接是否会断掉。这个问题如果详细讨论的话比较复杂,涉及手机AP,BP处理器的处理策略,简单点说就是TCP数据包能够唤醒手机。因此长连接是比较适合手机移动端的即时通讯的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10058 0
AngularJS+ASP.NET MVC+SignalR实现消息推送
原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景   OA管理系统中,员工提交申请单,消息实时通知到相关人员及时进行审批,审批之后将结果推送给用户。 技术选择   最开始发现的是firebase,于是很兴奋的开始倒腾起来。
1425 0
APNS IOS 消息推送JSON格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送。下面积累了我在进行apns推送时候总结的 apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 aps 字典。
1917 0
APNS IOS 消息推送
一.Apns简介: Apns是苹果推送通知服务。 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备);然后,将服务器的信息接收并且保存在APNs当中,APNs从其中注册的列表中查找该IOS设备(设备可以为iPhone、iPad、iPod Touch,版本是iOS3.
1185 0
APNS IOS 消息推送处理失效的Token
在开发苹果推送服务时候,要合理的控制ios设备的Token,而这个Token是由苹果服务器Apns产生的,就是每次app问Apns要Token,由苹果服务器产生的Token会记录到Apns里面,我们需要根据该Token进行制定设备的消息推送,所有Token需要我们自己去记录和管理,每个设备对应唯一的Token,而app的用户登录会有自己约束的别名,与该tokne进行关系绑定,这样按该别名进行推送,就可以找到对应的Token,进而推送到该iso设备上,对应失效的Token我们需要访问苹果的feedbackServer,拿取失效的Token,然后把本地记录的失效token进行移除。
1504 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13871 0
异步tcp通信——APM.Server 消息推送服务的实现
消息推送服务   服务器推送目前流行就是私信、发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的;高性能、分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用kafka等分布式消息队列方案实现。
962 0
一款消息队列的客户端框架——启明信息车联网MQ演进实践分享
一款消息队列的客户端框架——启明信息车联网MQ演进实践分享 分享人:阿里云MVP曾宪宇,2014开始 就职于启明信息,负责车联网平台的架构和建设,坐标吉林长春。 分享内容:结合主流MQ,介绍一款基于Java的开源消息队列客户端框架。
2327 0
+关注
皮皮酱ye
一名集美貌与才华的女子
66
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载