【文章分享】移动无线网络长连接

============问题描述============

移动互联网应用现状

因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 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万个长连接。

后记

稳定维护长连接是推送平台的一个基础,极光推送团队将会在这方面长期投入,以保证用户能有效的节省电量、流量,同时数据能实时送达。

============解决方案1============

软文软文软文

============解决方案2============

学习了,感谢楼主分享

============解决方案3============

长知识了,长连接实现起来不容易啊

============解决方案4============

非常强大,支持下~

============解决方案5============

学习下长连接的知识,多谢楼主分享

============解决方案6============

单机并发300W么,相当的犀利啊

============解决方案7============

支持下没钱看哦

============解决方案8============

good,还是挺靠谱的啊

============解决方案9============

厉害  涨见识了

============解决方案10============

激光推送博客上的文章。。。

============解决方案11============

可以短信push啊,终端只需要注册receiver就行了.

============解决方案12============

貌似和GCM差不多吧

============解决方案13============

谢谢楼主;感谢

============解决方案14============

不错不错不错

============解决方案15============

在及时响应的同时还省电省流量对吧

============解决方案16============

貌似很强大,学习学习了

============解决方案17============

涨知识了,长连接才是最佳方案啊

============解决方案18============

有没有试过用IPV6来做?

时间: 2024-11-09 11:59:20

【文章分享】移动无线网络长连接的相关文章

遇到问题----win10无线网络无法连接到此网络

遇到的情况-----win10系统无法连接到此网络 原因 看了很多个帖子发现可能的原因有以下几种: 网络密码错误 笔记本被加入了网络黑名单中 win10的无线网卡驱动问题 笔记本的无线网卡问题 解决方法 网络密码错误的情况表现为第一次就连接不上或者之前连接上突然连接不上了. 有可能是之前的旧密码被修改了. 这种情况下明确新密码后在网络设置中管理已知网络,选中它点击忘记,之后再在网络列表中再次点击连接即可. 如果确认密码没错还是报错无法连接此网络 尤其是之前是好好的 突然连接不上了 则有可能是 被

centos下无线网络连接

介绍下centos6上,在命令行中实现无线网络的连接,当然这需要无线网卡的支持,这里就假设驱动已经安装好了. [[email protected] ~]# ifconfig wlan0 wlan0     Link encap:Ethernet  HWaddr AC:72:89:04:EA:84             UP BROADCAST MULTICAST  MTU:1500  Metric:1           RX packets:0 errors:0 dropped:0 over

关于无线网络 (一)

网络嗅探 每张网卡都有自己全球唯一的地址(MAC地址,12字节),正常情况下网卡只接收发送给自己的数据包(数据包前12字节就是数据包的目标MAC地址),及广播地址(MAC地址为12个F). 混杂模式(Promiscuous mode)就是将网卡接收到所有的数据全部发送给系统. 而无线网卡的嗅探原理: 无线网卡是只有当网卡与无线网络建立连接以后,才会返回数据包给主机.如果网卡没有建立连接,只会显示接收到的广播帧.(也就是路由器热点发送的广播数据包,告诉他我这是路由器,可以建立连接) 而当无线网卡打

Linux下的无线网络

无线网络:pc和服务器通过网络设备连接到一块称为网络,其中有线的为有线网络,无线的为无线网络. 无线网络的标准: 802.11a使用5GHz频段,传输速度为54Mbps,与802.11b不兼容. 802.11b使用2.4GHz频段,传输速度为11Mbps,与802.11b不兼容. 802.11g使用2.4GHz频段,传输速度主要有54Mbps,108Mbps与802.11b兼容. 802.11n使用2.4GHZ频段,传输速度可达300Mbps 无线网卡的历史:CDMIA接口卡  pci接口  u

长连接和短连接分析

转自:http://www.cnblogs.com/heyonggang/p/3660600.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向

如何使一台电脑同时使用有线本地网络和无线网络进行上网

注意,这里不是指在一台使用有线上网的电脑上使用无线WIFI 有些公司环境中,需要同时使用无线网络和有线网络: 1)有线网络作为本地连接与局域网路由器连接,使其能够与其他他电脑连通: 2)无线网络是使用无线网卡连接外网路由器进行上网: 本方法适用于下面2种或其他类似情况: A. 有线本地局域网只能连接内部网络,无线网络能够连接外网 B. 内网使用无线路由器+无线网卡搭建,同时内网的电脑通过无线路由器可正常上外网,有线本地网络只是用于局域网内几台电脑自建的有线局域网 在XP上,一旦同时使用有线网络和

长连接&短连接分析

转自:http://www.cnblogs.com/heyonggang/p/3660600.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向

长连接和心跳

介绍 长连接 首先这里所说的连接是指网络传输层的使用TCP协议经过三次握手建立的连接:长连接是指建立的连接长期保持,不管此时有无数据包的发送:有长连接自然也有短连接,短连接是指双方有数据发送时,就建立连接,发送几次请求后,就主动或者被动断开连接. 心跳 心跳这个名字比较形象,就像人体心跳一样,是用来检测一个系统是否存活或者网络链路是否通畅的一种方式,其一般做法是定时向被检测系统发送心跳包,被检测系统收到心跳包进行回复,收到回复说明对方存活. 心跳和长连接在一起介绍的原因是,心跳能够给长连接提供保

centos6.5配置无线网络

由于安装的是服务器版,所以开机无法连接网络,以下这些情况都是针对驱动已经安装OK.按步骤操作如下(以下操作默认都是在超级管理员权限下进行): 1.测试电脑是否安装wpa_supplicant,测试方法多样,控制台输入wpa_supplicant 回车,查看输出信息,如果为command not found,则表示未安装wpa_supplicant,如果输出的是帮助信息则跳至步骤6. 2.插入你安装系统时的优盘,执行命令 fdisk -l 找出你优盘所对应的磁盘,记住前边的/dev/sd*(我的是