微信收费事件背后被广泛忽略的技术细节

作为一个横跨通信与互联网两大行业的从业者,前四年的核心网经验和后五年的互联网经验让我不得不感慨一个非常遗憾的现实:通信与互联网两大行业本来可以有珠联璧合的技术协同,为移动互联网提供近乎零耗电零流量的PUSH机制,但由于两个行业之间长期以来的价值观隔阂和互防心态,导致如今的手机PUSH技术不仅为用户增加了显著的电量消耗,还对移动运营商的基础设施造成了完全不必要的信令压力。微信与运营商的纷争正是这种冲突集中爆发的结果。

看到不少来自两个行业的专业分析,通信行业的专家谴责微信过于频繁的心跳和短包导致“信令风暴”,而互联网人士则往往站在用户与道德的制高点上对移动运营商挖苦讥讽,双方都很少探究这个问题的深层次技术和利益矛盾。这里我不妨提一提有些大家没有真正重视的技术细节。

为什么使用同样PUSH技术的Apple和Google等巨头,没有被运营商卯上,唯独单单拿微信下手?大家也许会认为这是运营商欺软怕硬,拿Apple和Google没办法。其实从实际数据上来看(下面将提到),微信确确实实产生了远超Apple和Google的信令需求。难道是因为腾讯技不如人,被逮着了尾巴?其实不然,我们曾经也在PUSH技术上投入了较多的分析研究,其中一项发现或许可以解释各种原委。根据分析,一般当基带空闲超过一定时间后,运营商的IP网关会自动释放(关闭)连接。目前各家所使用PUSH通道的实现原理虽然同为『长连接慢心跳』,但这个『慢』字却有很大的文章。Google在Android系统中使用蜂窝(2G/3G)网络连接GCM的PUSH通道时,默认采用的心跳周期是28分钟,这才是所谓“慢”的含义 —— 尽可能降低心跳的频度,从而达到尽量省电的目的。但这个放诸全球绝大部分地区借行得通的规则,到了中国大陆,就出现了问题。以中移动的2.5G网络为例,经过粗略测试,大约5分钟左右的基带空闲,连接就会被释放,这就是为什么微信Android版本选择以『5分钟』为周期发送连接心跳。可能有人会有疑问了,『那Google以28分钟发送心跳,岂不是在中移动的2.5G网络下无法保持PUSH长连接?』事实上,确实如此,这也是为什么Google的PUSH通道经常『迟到』。当我们活跃使用手机时,由于基带往往并不会闲置,所以部分掩盖了问题的本质。另外,当连接到Wi-Fi时,宽带的网关一般没有空闲释放机制,所以长连接会得到保持,这也进一步减少了我们平时遭遇的PUSH迟到。

『5分钟』的心跳周期到底是什么概念?可以理解为,每部安装了微信的Android设备每天发送近300条短信(其实占用的信令资源还远超这个数量);还意味着每天你的手机将被从待机省电状态唤醒近300次,每次相当于打一个几秒钟的电话。粗略测算,一般的Android手机每天有超过15-20%的电量被消耗在发送过度频繁的心跳上。其实,这都还远不是最糟糕的事情。由于众所周知的原因,大陆行货渠道发售的Android手机都无法使用Google的PUSH通道,原本每个手机中只需要建立的唯一共享的PUSH通道,被人为分裂,以至于每一个声称为用户提供实时通知的国内App,基本都在重复上面微信所做的行为。当你的手机中同时安装了多个这类App时,无论手机的耗电,还是运营商的信令负担,都要数倍于上述情形。

虽然我向来不惮以最坏的恶意揣测国内的垄断巨头,但在这个事情上,中移动或许确有它的苦衷。正如很多技术文章中所言,2G网络的基础结构和协议并未针对IP传输优化,其服务IP链路的信令承载能力相对较弱,而TD-SCDMA又长期得不到真正的发展,导致中移动的2.5G网络承受了超龄超载的负荷。刻意缩短空闲连接的释放超时,可能原本是期望能起到节省信道资源的目的,没想到聪明反被聪明误,这一限制性的举措让互联网应用不得不以远高于正常的频率发送心跳以维持PUSH长连接,结果大大加重的信令负担,给本就脆弱的2.5G网络雪上加霜,而且更给用户的手机造成了远超常规PUSH技术的电量消耗,造成了如今这一『三输』的格局。

其实,不光是微信,整个移动互联网行业都在努力解决PUSH机制目前所面对的各方面问题。包括Google、Apple这样在整个行业举足轻重的巨头,都仅仅在OSI通信协议的4层以上作各种努力,目前几乎所有的PUSH机制都基于『TCP长连接慢心跳』方式实现。虽然『慢心跳』如果得以正常工作,可以在一定程度上降低手机基带模块的工作频度,但无论互联网行业在技术上再如何标榜“PUSH”相比“PULL”的流量优势,但在OSI的下三层来看,基带模块所承受的负担和“PULL”仍然没有本质差别。这就决定了耗电问题不可能从互联网技术层面彻底解决。事实上,在移动通信网络中,信令是一种天然的最佳PUSH载体,它不需要任何IP层的收发包(也就不需要TCP连接)就能实现秒级的实时性,最重要的是它没有任何额外的电量负担,手机完全只需处于正常的待机状态。可惜移动运营商只会将其运用在一本万利的SMS(及WAP PUSH)服务,压根不可能无偿提供给互联网产业使用。结果,互联网行业选择了虽然不用付费,但却代价高昂的『TCP长连接』,只为让用户享受到免费的通知服务。这种两大行业置用户体验于不顾的分庭抗礼,已经相持近10年,而当互联网终究开始以免费服务反噬移动运营商的SMS甚至语音业务时,运营商再也坐不住了…… 但与其饱受信令风暴的折磨,不如主动免费开放信令通道作为更高效的PUSH通道给互联网产业使用,再以『免费增值』的思路构建有QoS保障的VIP PUSH服务。不仅可以大幅度节约信令资源,更能以用户体验的提升打造核心竞争优势和增值空间。能否走出这样一条转折的道路,就看运营商是否愿意转变思维了。

注:由于iOS系统的相对封闭性,暂时未能测定Apple的Push通道APNS在2.5G网络下的长连接心跳周期。欢迎了解的朋友补充测试数据。

UPDATE:更正微信Android版在中移动2.5G网络下的心跳周期为5分钟(此前测定的2.5分钟存在偏差)

时间: 2024-10-05 15:46:28

微信收费事件背后被广泛忽略的技术细节的相关文章

微信收费直播(如何做付费的微信直播)教程

原创教程.今天写了两份直播教程文章. 场景描述:在做微信直播时,希望实现付费观看功能,即用户付费后,再返回直播的观看页面: 场景应用:在线教学类的课程.在线教育类网站.个人做微信的收费直播. 首先,还是上实际的效果图.观看者的观看流程是:打开直播页(或扫直播页二维码)->付费观看,支付观看的费用 ->观看正式的课程直播. : 具体如何实现这种效果呢: 第1步. 登录保利威视云直播平台( http://www.polyv.net ),创建一个直播频道 第2步. 登录保利威视云直播管理平台 >

Qt+事件的接收和忽略

事件的接收与忽略的示意图如下图: 依据前面的知识,事件是可以依据情况进行接收和忽略的,现在,我们就来了解下有关事件的更多知识: 原文地址:https://www.cnblogs.com/doker/p/11063742.html

android容易忽略的技术细节

1:在onPause()中进行数据持久化.activity的生命周期为onCreate()---->onRestart()----->onStart()------>onResume()------>onPause()-------->onStop()------>onDestroy(),其中onCreate().onRestart().onStart().onResume()执行结束后不能立即结束进程,所以onPause()是结束进程前最后一个一定会被调用的方法.因为

微信商业化的背后 七星级产品经理的蜕变-张小龙

微信小店.开发更多接口给开发者.微信公众平台开放设备接入能力...,以及未来更多的微信商业化运作,无不见证微信O2O的实力和野心,一个低调地运作Foxmail的技术宅如何成为七星级的产品经理呢?我们来看看<财经>杂志记者宋玮的文章<张小龙:走出孤独[深度人物]> 人人都爱张小龙.作为微信的缔造者,他凭这款产品所创造的商业价值(微信最新的估值是640亿美元)丝毫不亚于任何商业领袖,更重要的是,相比后者,张小龙的形象单纯多了. 这名皮肤黝黑.爱打高尔夫球,开着一辆奥迪轿车的中年男子,在

微信拉票背后的利益纠葛

微信自发布以来,就一直处于舆论的漩涡之中.虽然微信官方不断针对功能进行各种优化,但人民群众的智慧是无穷的,总会找到微信的"漏洞",成功让其延伸出更多的花样用途.花样翻新的"面膜微商"暂且不提,近段时间以来,不论是在朋友圈还是在好友群里,总是出现"帮我家宝贝投票"的消息. 如此高频次.大批量且毫无节制的拉票消息,已经严重影响微信的使用感受.微信拉票的背后,更多的是剪不断的利益纠葛.如果你不慎掉入"坑中",还是赶快爬出来吧! 不胜

微信公众平台推出针对开发者的微信认证事件推送

微信公众帐号的微信认证涉及开发者接口的赋予,高级接口需要认证通过才能获得,为了帮助公众号开发者获取公众号的认证状态,微信公众平台开始提供公众号认证过程中各阶段的事件推送,会推送到在开发者中心填写的服务器地址中. 微信认证包含资质认证和名称认证两个阶段,具体事件推送包括以下6种类型(点击查看开发者文档): 1. 资质认证成功(此时获得认证公众号才有的接口权限) 2. 资质认证失败 3. 名称认证成功(此时获得微信客户端中公众号的打勾认证标识) 4. 名称认证失败(此时虽然未获得打勾,但仍有接口权限

微信回复事件(测试账号)

WinxinSdk.class.php <?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/28 * Time: 18:56 * */ class WinxinSdk { private $appID = "wx***2d"; private $appsecret = "51***80"; public static $access_token = ""

微信上的这些&quot;细节&quot;别忽略,可能会有人在偷偷关注你,建议自查

智能时代,想知道谁在偷偷关注你,写情书或者"飞鸽传书"那一套早就淘汰了,因为很多人都是通过QQ访客记录查看,谁在默默关注你.后来微信以简洁的页面吸粉一波,很多人开始用微信.众所周知,微信是没有访客记录.就算被人翻遍朋友圈对方也不知道,虽然没有访客记录,但是微信还是有很多细节暴露谁在关注着你. 微信"访客记录"别忘记查看,暴露谁在偷偷关注你,赶快自查一下先来卖一波关子,先看一下QQ访客记录.操作步骤:访客周报(可以查看这一周谁关注查看你空间次数最多),不仅可以显示访客

贴吧事件背后 百度“自疗”的勇气

文/张书乐 百度贴吧事件还在口水战,直接把快播.斗鱼和携程的负面给压了.在这一连串的猛烈攻击之后,百度12日宣布贴吧所有病种类吧全面停止商业合作,只对权威公益组织开放.紧接着网上又开始流传疑似李彦宏的内部信,其间反复强调"用户体验高于短期利润从来都是我们的信条"和"对钻空子的个人和机构零容忍". 百度是否有错呢?当然有,一个公司,获得商业价值本是题中应有之意,至于用贴吧进行商业合作,延续百度竞价传统,也本是其运作轨迹的一个常态.只是,只要你的系统在运行,就一定有Bu