`
hsabby
  • 浏览: 21116 次
社区版块
存档分类
最新评论
  • Rainyn: 作者写的很好。有完整项目实例吗?这个是跑在tomcat还是je ...
    初识cometd
  • hwfrog: 这个没有看过具体的源码,猜测的,因为init是所有用户进程的父 ...
    inittab的使用
  • hwfrog: 确实简单,这个感觉和RCP很类似,RMI在某些地方还是有一定的 ...
    Java的RMI初探
  • hwfrog: 不错, 学习了; 这段时间也想研究一下源码, 多交流
    初识cometd
  • hwfrog: 后面准备总结一下java的接口和内部类; 请博主多关注哈
    Java访问修饰符

消息推送的一点了解

 
阅读更多
1、消息推送的背景
现在选择做消息推送的,一般都是基于移动互联网而言,各种各样的应用,想把消息推送到用户的终端设备上;之前传统的消息推送,更多的是针对Web页面而言(例如实时股票数据显示等)。无论是移动互联网还是传统的web,消息推送,都是用户被动的被接收某些消息,这类消息,和用户主动获取相比,有更好的实时性。换句话说,消息推送,更适合用户对实时性有诉求的场景,同时也适合那些用户不一定会主动获取的场景

2、消息推送的技术方案
无论是移动互联网,还是传统互联网,消息推送方案的本质都是客户端告诉服务端我在这里,并持续告诉服务端,我还活着,服务端有消息时,把哪些客户端还活着查出来,并把消息推送给它们。下面大概分析一下各个方案的优略:

1)基于UDP的消息推送:说实话,这个是笔者想到的第一个方案,实现简单、并且不占用连接资源。客户端发送UDP消息到server,之后定时发送心跳消息到server端维持自己在server端的状态,之后server端就可以源源不断的推送消息到client端了。这个方案最大的缺点就是UDP协议的不确定性,即数据有可能会丢失。如果我们选择的消息推送方案,对于消息的达到率没有太高的要求,我感觉这个方案也不错,尤其是server要面对大并发的要求时。

2)HTTP的long-polling模式:该方式是客户端主动请求的一个升级版;不同之处就在于,long-polling模式下,如果server端当前没有消息推送,server端并不会直接返回无数据的响应,而是会维持这条连接,等到有消息时再返回响应。而客户端这边,如果发现等了一段时间,服务端还没有消息送过来,则会断开连接,随即又重新连接上,再送发送请求继续下一次消息等待。从描述中可以看出来,long-polling实际上还是poll,只不过和普通的polling相比,它比较有耐心,等待的时间long一点。这个方案,应该是当前很多消息推送架构采用的方案,算是比较成熟的实现。只不过笔者有一点不明白,反正都已经连接上了,为什么要断开呢?就继续保持住这个连接,客户端再发送一个请求不行么?(PS:后续阅读发现,可能和浏览器的实现有关;IE浏览器只有在连接断开时,才认为数据接收完整,才能读取数据;如果是自己实现的client,应该就不用断开了)

3)HTTP的stream模式:个人认为该方式是long-polling模式的一个升级版,也就是前面提到的不断连接的模式;只不过,客户端只会发送一次请求,之后就是服务端源源不断的主动发送数据给client端了。需要注意的是,因为HTTP协议要求,请求和响应是一一匹配的,所以我们看见的服务端源源不断的多条通知,在后台都是一条HTTP响应消息,这个响应消息,始终处于未发送完全的状态。这就是为什么有些支持Stream模式的浏览器,小图标一直在转的原因。和上面笔者提出的长连接方案相比,stream的方案少了客户端重复发送请求消息的消耗,只不过从client端看,永远无法接收到完整的HTTP消息

4)WebSocket模式:该方式彻底抛弃了HTTP协议,不再拘泥于它的一收一发,充分利用底层tcp协议的全双工能力,连接建立后,客户端和服务端都能主动的发送消息,不需要费劲心思配合收发了。显然,相比较前面的集中方案,websocket是最先进的方式。只不过当前有很多浏览器不支持。

5)XMPP协议:基于XMPP的消息推送,和websocket差不多;都是维持长连接,并且server端在该长连接上主动发送消息。不同的,应该只是协议的定义。XMPP其实是一种即时消息通信协议,用来完成Server推送消息到client端,绰绰有余,换句话说,未免有点太重了。

3、消息推送方案的挑战
推送方案的评价标准:Safe、Stable、Save、Slim;其中最大的挑战应该是Stable和Save的矛盾;既要稳定,又要节省资源;一台服务器能同时支持多少台客户端并发应该是评价一个消息推送方案的核心指标之一。其实,大家基本方案都差不多,都是上面几种模式之一;实现上的差别,应该就是服务器端设计能力的差别了;如果管理并处理好这么多并发连接数,是push方案最大的挑战。

3、移动互联网推送的区别
和传统的web相比,移动互联网推送自主的权利大了很多。因为客户端可以完全自己开发,想怎么玩就怎么玩。上面讲得这些方案,基于XMPP的协议就是,应该不会有哪个浏览器会解析XMPP协议的,但是我们自己却可以开发一个客户端来接收。这也就表示,在移动互联网上实现消息推送,可选择范围其实很大。当然,既然能够自己做主了,同时也意味着挑战也来了。移动互联网和传统的web不一样,设计的时候,还需要考虑到网络资源问题。前端时间沸沸扬扬的微信收费事件,就是因为占用太多流量资源导致。如何能够设计少占流量,少耗资源的应用,就是移动推送互联网客户端的挑战[size=large][/size]
分享到:
评论
2 楼 hsabby 2013-08-14  
当前正在研究cometd,过几天写博文总结一下,继续关注啊
1 楼 hwfrog 2013-08-13  
嗯,确实,push确实考验服务器的并发接入能力,博主可以推荐几个可用的开源呢?想学习一下

相关推荐

    openfire推送

    在开发时需要注意这一点,确保推送消息的到达。 第三种推送方案是使用IQ插件形式来开发推送模块。这种方式的优点是模块耦合度低,符合Openfire的设计理念,消息通过服务器中转,便于进行自定义消息处理或过滤。缺点...

    推聊是一个基于极光推送 (JPush) 的手机聊天系统。支持群聊与点对点聊天。当前包括 Android客户端、iOS.zip

    在深入解析推聊系统的构成之前,我们先了解一下极光推送(JPush)的核心概念。 极光推送是极光公司推出的一款专业的移动端消息推送服务,它允许开发者向用户发送实时的消息通知,提升用户的活跃度和应用的黏性。...

    mina及时推送客户端服务端实现

    Apache MINA(Multi-purpose ...通过学习和实践"mina及时推送客户端服务端实现"项目,开发者不仅能掌握MINA框架的基本用法,还能深入了解TCP长连接、实时推送的原理与实现,为构建高效、稳定的网络应用打下坚实基础。

    C#调用adb传输和推送数据到安卓设备上.zip

    本教程将深入探讨如何使用C#来调用ADB,实现数据的传输和推送至安卓设备。 首先,了解ADB是关键。ADB是Android SDK的一部分,它通过USB或Wi-Fi连接,为开发者提供了与安卓设备通信的桥梁。主要功能包括: 1. **...

    Android中关于C2DM开发的一点总结

    在Android平台上,C2DM(Cloud-to-Device Messaging)是一种由Google提供的远程推送通知服务,...随着技术的发展,现在更多的开发者转向了使用FCM,但了解C2DM的历史和工作原理对于深入理解Android推送服务依然有价值。

    086-FontesPush5_push_

    在Rio中实现推送通知,开发者可能需要了解如何配置Delphi IDE,集成推送服务的SDK,编写处理推送事件的代码,以及如何在不同操作系统(如Android和iOS)上测试和调试。 在提供的标签"push"中,我们可以推断这个...

    swift-网页打开或者推送根据url地址跳转到相应界面

    在Swift开发中,实现网页打开或推送时根据URL地址跳转到相应的应用界面是一项常见的功能。这涉及到URL Scheme、Deep Linking以及可能的Universal Links等技术。这些技术可以帮助用户从浏览器、邮件、社交媒体等外部...

    数据库复制性能测试 推送模式性能测试

    在推送模式下,数据更新发生在主服务器上,随后这些更改会被主服务器主动推送到备份服务器。这一过程看似简单,实则对主备服务器的性能提出了较高的要求,尤其是I/O操作。 在性能测试中,测试者关注了“avg. disk ...

    msg.rar_msg site_网页 消息

    如果消息需要实时更新,可能还会用到WebSocket协议,它提供了全双工的通信渠道,允许服务器主动向客户端推送数据。 标签“msg_site”表明了消息功能与网站有关,可能是网站的一种通知方式。而“网页_消息”标签...

    微信小程序开发-拼单神器:含 leanCloud后端案例源码.zip

    6. 消息推送:当拼单状态发生变化时,如有人加入拼单或订单完成, LeanCloud 的实时云消息推送服务能及时通知用户。 开发过程中,开发者需要编写小程序的前端页面逻辑,使用 WXML 和 WXSS 定义界面结构和样式,通过...

    hyperlog-android:实用程序记录器库,用于将日志存储到数据库中并将其推送到远程服务器进行调试

    这是一个简单的库,将允许Android应用程序或库将log存储到database以便开发人员可以将数据库中的日志提取到“ File或将日志推送到remote server以进行debugging 。 想要更多地了解这一点,并想知道为什么您比自己...

    多人聊天工具修正版

    总的来说,多人聊天工具修正版结合了Socket通信技术,实现了高效、实时的多人聊天功能,同时具备了丰富的用户交互特性,如服务器推送通知、登录状态管理和即时消息发送。通过良好的文档管理,它还提升了协同工作的...

    How To Push data from BI to XI

    在深入了解具体的推送流程之前,我们首先需要理解几个关键的概念: 1. **Business Intelligence (BI)**:是用于分析和呈现组织内部复杂数据的一系列工具和技术。在SAP环境中,BI通常指的是SAP Business Warehouse ...

    深入体验c#项目开发附带CD赠送源码05 企业及时通讯系统

    1. **即时消息**:系统应支持文本、图片、文件等多种形式的消息发送,且具备消息推送功能,确保信息的实时性。C#中的多线程技术可以用来处理后台消息的推送和接收。 2. **群组聊天**:除了个人间的私聊,还应支持...

    用组策略分发软件安装过程

    在企业环境中,高效地分发软件是IT管理的重要任务,而组策略提供了一种有效的方法来实现这一点。以下将详细阐述如何利用组策略进行软件分发。 首先,了解组策略的基本结构。组策略对象(GPO)是组策略的核心组成...

    Android--开发--LumaQQ-Android--开发-- qq 代码.rar

    5. **推送通知服务**:为了实现实时的消息推送,LumaQQ可能采用了GCM(Google Cloud Messaging)或FCM(Firebase Cloud Messaging)。这涉及注册接收器、处理消息推送和在后台运行服务等方面。 6. **消息加密**:...

    notific_news

    这些通知可以是即时的,如弹窗提示,也可以是后台推送,如邮件或消息推送服务。它们通常与多平台同步、个性化设置和用户交互紧密相关。 首先,我们要了解通知系统的基本概念。通知系统通常由以下几个核心组件构成:...

Global site tag (gtag.js) - Google Analytics