V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
daydaysay
V2EX  ›  iDev

APNs 高效率推送一些经验分享(no gevent,no celery,no multithreading)

  •  
  •   daydaysay · 2014-09-17 10:25:30 +08:00 · 6218 次点击
    这是一个创建于 3728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    v2ex也有很多讨论帖,但从我最后的实践结果来看,这些都没说到重点。
    http://64.233.160.68/search?q=site:v2ex.com/t%20apns
    所以想到在此分享下我在解决APNs推送的一些经验。

    推送的效率与两个因素有关

    1,服务器与APNs Gateway的连接带宽

    2,发送到APNs数据的有效性(保证每个消息体都是正确的,避免APNs主动close掉连接,因为重新创建一个ssl连接得花费大概1s的时间)

    做到了这些,你就可以仅仅通过单线程来高效率推送。
    提醒一下,github上最热门的几个APNs推送项目不是最佳选择,他们都是单个消息体传送,这样的话,ip层就浪费太大,MTU如果是1500的话,我们可以把7个消息体封装到一个package去,这样ip层一个数据包就可以传输7条推送。

    理想状态下的推送,每秒发送数可以直接计算得出:
    (最大带宽/每个消息体大小),假设你能保证与APNs服务器有10M字节的传输速度,每个消息体200字节,那么你每秒可以推送 10×1000×1000/200 = 5W,也就是1min可以推送300W条。除去组装数据和其他逻辑处理,1分钟至少也可以达到百万级别。

    那么,推送次数如若没有达到10亿级别,所有的异步,协程,多线程都是不必要的。
    最开始设计celery+rabbitmq的组合方案也就没有什么优势了,不过方便以后横向扩展。


    还有badge,长连接过程中一段时间没有数据后,会被reset的情况也欢迎大家讨论。
    5 条回复    2014-09-18 18:16:57 +08:00
    jiangzhuo
        1
    jiangzhuo  
       2014-09-17 13:52:12 +08:00
    看了github上nodejs的實現star最多的 也是樓主說的這個問題
    GTim
        2
    GTim  
       2014-09-17 17:20:39 +08:00
    @jiangzhuo 给个链接
    julyclyde
        3
    julyclyde  
       2014-09-18 13:34:47 +08:00
    why no gevent?
    抵制得毫无理由
    daydaysay
        4
    daydaysay  
    OP
       2014-09-18 18:15:57 +08:00
    @julyclyde
    我的意思是不是任何业务都需要用框架来解决。用gevent当然可以提高最终效率。
    现实中,碰到有家伙说到调优,提高速度,就是增加协程数,进程数。
    ”我再多开几个进程吧“
    daydaysay
        5
    daydaysay  
    OP
       2014-09-18 18:16:57 +08:00
    我的意思是,不是任何业务都需要用框架来解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.