`

推送底层原理

 
阅读更多

  使用push链接:http://jingyan.baidu.com/article/4f34706ecf2664e387b56d98.html

                            http://www.devstore.cn/new/newInfo/948.html

 

**移动互联网应用现状**
因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端。
为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。
从耗费的电量、流量和数据送达的及时性来说,Push 都会有明显的优势,但 Push 的实现和维护成本相对较高。在移动无线网络下维护长连接,相对也有一些技术上的难度。本文试图给大家介绍一下我们极光推送在 Android 平台上是如何维护长连接。

**移动无线网络的特点**
因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。


NAT 功能由图中的 GGSN 模块实现。
大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。

**Android 平台上长连接的实现**
为了不让 NAT 表失效,我们需要定时的发心跳,以刷新 NAT 表项,避免被淘汰。
Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是AlarmManager。
**Timer**
Android 的 Timer 类可以用来计划需要循环执行的任务,Timer 的问题是它需要用 WakeLock 让 CPU 保持唤醒状态,这样会大量消耗手机电量,大大减短手机待机时间。这种方式不能满足我们的需求。
**AlarmManager**
AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。
这意味着,如果我们用 AlarmManager 来定时执行任务,CPU 可以正常的休眠,只有在需要运行任务时醒来一段很短的时间。极光推送的 Android SDK 就是基于这种技术实现的。
**服务器设计**
当有大量的手机终端需要与服务器维持长连接时,对服务器的设计会是一个很大的挑战。
假设一台服务器维护10万个长连接,当有1000万用户量时,需要有多达100台的服务器来维护这些用户的长连接,这里还不算用于做备份的服务器,这将会是一个巨大的成本问题。那就需要我们尽可能提高单台服务器接入用户的量,也就是业界已经讨论很久了的 C10K 问题。
**C2000K**
针对这个问题,我们专门成立了一个项目,命名为C2000K,顾名思义,我们的目标是单机维持200万个长连接。最终我们采用了多消息循环、异步非阻塞的模型,在一台双核、24G内存的服务器上,实现峰值维持超过300万个长连接。
**后记**
稳定维护长连接是推送平台的一个基础,极光推送团队将会在这方面长期投入,以保证用户能有效的节省电量、流量,同时数据能实时送达。

119935.jpg
分享到:
评论

相关推荐

    ios消息推送 使用notnoop消息推送

    在iOS开发中,为了实现远程通知服务,...通过熟悉Notnoop的使用,开发者可以更专注于业务逻辑,而不是底层的推送实现细节。在NotnoopTest文件中,你可能会找到一个示例代码,展示了如何将上述步骤整合到实际项目中。

    DWR消息推送简单实例

    2. **消息推送原理** 消息推送与传统的HTTP请求-响应模型不同,它不是由客户端发起请求获取数据,而是由服务器主动向客户端推送数据。DWR通过几种机制来实现这一点,包括长轮询(Long Polling)、iframe心跳、HTML5...

    goEasy消息推送

    通过GoEasy平台,开发者无需深入了解WebSocket底层细节,只需几行代码就能轻松实现消息推送功能。 首先,我们需要在GoEasy官网注册一个账号并创建应用,获取到AppKey和AppSecret。这两个参数是连接GoEasy服务的核心...

    Android消息推送

    在Android消息推送中,它可以作为底层协议来实现消息的发送和接收。 - **ExText**、**pushMessage**、**基于消息推送的聊天工具**:这些可能包含了一些具体的推送实现案例,比如自定义推送服务、聊天应用的实现等,...

    android 长连接推送

    本文将深入探讨Android长连接推送的原理、实现方式以及相关的socket推送技术。 一、长连接与短连接的区别 1. 短连接:每次通信都需要建立连接,完成数据传输后立即断开,如HTTP协议。这种方式适合少量、低频的数据...

    消息推送中台websocket部分 + netty 手写 RPC

    本项目结合了WebSocket与Netty,旨在深入理解消息推送中台的实现原理以及RPC的底层机制。 首先,让我们详细讨论WebSocket。WebSocket是一种在客户端和服务器之间建立长连接的协议,与传统的HTTP协议不同,它允许...

    jquery-Bayeux数据推送

    《jQuery-Bayeux数据推送技术详解》 在Web开发领域,实时性是现代应用程序不可或缺的一部分。为了实现网页的实时更新,一种广泛采用的技术是 comet,它利用了HTTP长连接来模拟双向通信。jQuery-Bayeux就是基于comet...

    SignalR股票原理_服务端主动推送数据到所有客户端(广播)

    SignalR是一种实时Web应用程序框架,它使得服务器能够高效地向客户端推送数据,而不仅仅是响应客户端的请求。在传统的HTTP协议中,服务器与客户端之间的通信基于请求-响应模型,即客户端发起请求,服务器处理请求并...

    基于服务器推送技术建立在线交流平台的探讨与实现

    要实现服务器推送技术,首先需要理解其底层原理和技术栈。一种常见的实现方式是使用WebSocket协议。WebSocket提供了一个持久的、双向的通信通道,允许服务器在无需客户端发起请求的情况下推送数据。相较于传统HTTP...

    云推送:蝴蝶飞过沧海.docx

    云推送的核心原理是利用比APP更底层的中间件技术,建立一个持续的网络连接,以便将用户关注的信息直接推送到他们的终端设备上。这种技术的优势在于,即使用户并未打开特定的应用程序,也能接收到相关的实时通知,...

    ios信息推送的5个jar

    开发者可以通过JavaPNS来轻松地发送推送通知到iOS设备,而无需深入了解APNs的底层协议。 5. **log4j-1.2.16.jar**:Log4j是Apache的一个日志记录框架,用于收集和管理应用程序的日志信息。在实现APNs推送的过程中,...

    Android消息推送机制在分析交互系统中的应用.pdf

    ### 消息推送机制的工作原理 - **长连接机制**:为了提高推送效率,通常采用长连接的方式来维持服务器与客户端之间的通信通道。长连接要求在用户登录成功后,客户端与服务器之间建立起稳定的连接,并保持连接不断开...

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

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

    comet4j向客户端推送

    Comet4j的一大优点是其高度封装,它已经处理了大部分底层的细节,如连接管理、错误处理等,使得开发者只需要关注业务逻辑的实现,而不必关心底层的推送机制。 在使用Comet4j时,首先需要在服务器端进行注册,这通常...

    jpush-docs, JPush docs on official website. 极光推送官方文档。.zip

    极光推送(JPush)是基于移动互联网的即时通讯服务,为开发者提供高效、稳定、可靠的推送服务。这个“jpush-docs”压缩包包含了官方文档的完整内容,旨在帮助开发者理解和使用JPush的各项功能。作为开源项目,JPush...

    混合移动应用的消息推送之websocket

    混合应用一般使用Cordova...对于混合应用的websocket消息推送,其基本原理如下:图1.Hybridappwebsocket工作流程而原生应用的消息推送,其基本原理如下图:图2.原生app消息推送工作流程目前后者主要应用于原生app,而前

    Ruby-RubyPushNotifications轻松推送iOSAndroid通知

    Ruby Push Notifications库是一个用于iOS和Android设备的便捷通知服务,它简化了向这些平台发送推送通知的过程。...使用这个库,你可以专注于构建功能丰富的应用程序,而不用担心推送通知的底层复杂性。

    JavaWeb后台自动向前台发送消息

    通过以上讲解,我们可以了解到JavaWeb项目中使用Comet4J进行后台向前台推送消息的基本原理和实现方法。这个压缩包中的文件包含了MyEclipse开发的源码,可以直接运行,对于理解并实践Comet技术是一个很好的起点。在...

    openfire聊天推送

    【openfire聊天推送】是关于实现聊天和即时通讯服务的一项技术,主要涉及到服务器搭建和推送功能的集成。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,允许...

    GoEasy推送

    通过阅读这些文档和运行示例代码,开发者可以深入了解GoEasy的工作原理,熟练掌握如何在实际项目中应用GoEasy推送服务。无论你是Java开发者还是前端工程师,都能从中获益,快速实现消息推送功能。

Global site tag (gtag.js) - Google Analytics