服务器与客户端消息推送的原理

其实服务端与客户端实现消息推送的方式有几种:

1、客户端不断的查询服务器,检查新的内容,也就是所谓的pull或者轮询的方式;

2、客户端与服务器之间维持一个TCP/IP长连接(在HTTP1.1中,所有的请求都认为是长连接),服务器向客户端push;

3、当服务端有新内容的时候,发送一条类似短信的信令给客户端,客户端收到货从服务器下载新内容,也就是SMS的推送方式;

对于第一种方式有以下的缺点:

1、因为需要不断地轮询,所以手机会很耗电;

2、容易被系统杀死;

对于第二种方式:

我们首先来了解一下HTTP长连接的相关知识:

在HTTP1.1中,所有的链接都认为是长连接;HTTP长连接是一个在TCP连接的基础上,发送多个HTTP请求以及接收多个HTTP响应,这是为了避免每一次请求都去打开一个新的连接

在这里的消息推送系统中,HTTP长连接的作用就是向服务器发送请求,然后一直等待服务器的返回数据;这就相当于客户端在“监听”服务器,可以随时收到来自服务器的消息。

在这里还涉及到了同步与异步、阻塞与非阻塞等相关知识:

同步:IO操作将导致请求进程阻塞,知道IO操作完成,也就是说客户端在发送请求之后,必须得在服务端有回应之后才发送下一个请求;

异步:IO操作不导致请求进程阻塞,也就是说客户端在发送请求之后,不必等待服务端的回应就可以发送下一个请求;

阻塞:服务端的线程或者进程没有处理完数据的时候,不会返回,线程或者进程会被挂起,不再相应其他请求;

非阻塞:服务器端在没有处理完的时候会立即返回,不会挂起 线程或者进程,可以继续响应其他的请求;

阻塞和非阻塞是服务器端对请求的处理方式,在消息推送系统中,客户端+服务器一起,使用的是异步非阻塞。

1、客户端发出一个http长连接请求,然后等待服务端的响应,这个请求是异步的,所以客户端可以继续其他工作,比如发起其他的ajax请求等等。

2、服务端接到请求之后,并不立即发出数据,而是hold住这个连接,这个处理是非阻塞的,所以服务器还可以处理其他的请求;

3、在某个时刻,服务器有新的数据了,服务器再主动把这个消息推送出去,即通过之前建立的连接将数据推送给客户端;

4、客户端收到返回,这个时候就可以处理数据了,同时再次发起新的长连接。

而对于移动端来说:

首先说android端的:

普通的socket连接对服务器的消耗太大,所以就出现了像MQTT这种轻量级低消耗的协议来维护长连接;android维护长连接需要心跳机制,客户端发送一个心跳给服务器,服务器给客户端一个心跳应答,这样就形成了一次完整的握手,这个握手让双方都知道他们之间的连接没有断开,客户端是在线的。如果超过一个时间的阀值,客户端没有收到服务器的应答或者服务器没有收到客户端的心跳,那么对客户端来说则断开与服务器的连接重新建立一个连接,对服务器来说只要断开这个连接即可。

android的长连接是由每个应用各自维护的,于是每个应用如果在24小时在线,那么都得各自维护一个长连接,这种电量的消耗是可想而知的。

接下来对于IOS的:

IOS长连接是由系统维护的,也就是说苹果的ios系统在系统级别维护了一个客户端与苹果服务器的长连接,ios的所有应用上的推送都是先将消息推送到苹果的服务器,然后苹果的服务器通过这个系统级别的长连接推送到手机端上,这样有几个好处:

1、在手机终端始终只要维护一个长连接即可,而且由于这个长连接是系统级别的,不会出现被杀死而无法推送的情况;

2、省电,不会出现每个应用都各自维护一个自己的长连接;

3、安全,只有在苹果注册的开发者才能进行推送;

在这里解释一下MQTT协议:

轻量级的machine-to-machine通信协议;

publish/subscribe模式(发布订阅模式)

基于tcp/ip

支持Qos

适合于低宽带、不可靠连接、嵌入式设备、cpu内存资源紧张;

是一种比较不错的android消息推送方案

FacebookMessager采用了MQTT

时间: 2024-08-28 19:37:00

服务器与客户端消息推送的原理的相关文章

基于Qt移动应用的消息推送服务原理与应用

说到移动应用,大家都觉得移动嘛,当然是Java和Object-c来做啦,什么推送啊,各种系统调用啊,其实不然?如果你了解Qt, 你就知道我说的不然,也有所道理. 说道几点 一.目前Android的移动的消息.通知推送 1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等.而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池. 2)SMS(Push)方式:在Android平

消息推送

http://blog.csdn.net/axi295309066/article/details/53180628 消息推送 标签: 消息推送push极光推送小米推送即时通信 2016-11-16 00:16 70人阅读 评论(0) 收藏 举报 分类: Android基础(79) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 消息推送,即时通信,目的:想办法让服务器能够及时的通知客户端 消息推送最简单的方法就是使用第三方的,比如现在使用比较多的是小米推送.极光推送,消

netty-socketio消息推送

一,netty-socketio消息推送 1)在项目中常常涉及到消息推送的情况,消息推送要求的实时性,使用传统的方式已经不能满足需求了 2)使用netty-socketio做消息推送,实现步骤,加入jar包----->写启动,添加,通知,关闭工具类 -----> 设置依靠监听器启动 ----->页面引入js----->编写请求获取消息: 二,实现 1)映入依赖于js文件 <!-- 消息推送 --> <dependency> <groupId>co

service worker 消息推送

https://developers.google.com/web/fundamentals/codelabs/push-notifications/?hl=en 首先下载源码: git clone https://github.com/GoogleChrome/push-notifications.git 设置如下选项方便开发: 开始 注册之后记录sw实例: navigator.serviceWorker.register('sw.js') .then(function(swReg) { co

socket + pcntl_fork 实现客户端请求,服务器实时监听返回处理 消息推送

<?php /* socket链接整个过程 1,socket_create 第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET: 第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM.数据报套接字类型为SOCK_DGRAM.原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部): 第三个参数指定应用程序所使用的通信协议.此参数可以指定单个协议系列中的不同传输协议.在Inter

IOS 基于APNS消息推送原理与实现(JAVA后台)--转

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的

转:IOS 基于APNS消息推送原理与实现(JAVA后台)

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的

基于HTTP协议之WEB消息实时推送技术原理及实现

很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页消息实时推送的项目,但是当时实现的都不是很完美,甚至有时候是通过 Ajax 轮训的方式实现.在网上也找过不少的资料,真正说到点子上的几乎没有,很多文章大都是长篇大论,说了一些新有名字,什么“HTTP 长连接”,“实时推送”,“Comet 长连接推送技术”等.但真正提到如何实现实时推送的文章倒是没有看

iOS 基于APNS消息推送原理与实现(包括JAVA后台代码)

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的