请问有人实现过大规模(百万级)的APNS服务端么?

2013-05-30 13:23:51 +08:00
 athenaxp
现在发送不是问题,但是由于苹果的设定,遇到失效的ptoken就会关闭连接,导致于不能重用长连接,那么效率就很低了,如何能够使用长连接还可以避开失效ptoken?

请教各位有什么经验么?
5569 次点击
所在节点    iDev
13 条回复
est
2013-05-30 13:29:48 +08:00
用过。多线程发就行了。
laputa7
2013-05-30 14:02:17 +08:00
推送前应该调用苹果的feedback服务,把失效的token干掉。
athenaxp
2013-05-30 14:02:38 +08:00
@est 请问如何解决的invalid ptoken导致关闭连接的问题?
est
2013-05-30 14:03:50 +08:00
@athenaxp 一个连接断了不影响其他999999个TCP连接发送呀。苹果的simple和enhanced格式都会断连接的。别折腾长连接了。早发完早收工。
ipconfiger
2013-05-30 14:11:02 +08:00
遇到失败就干掉连接,重新建立一个继续......,然后用gevent开一堆纤程来跑
athenaxp
2013-05-30 14:12:08 +08:00
@laputa7 苹果的文档上说,他会返回最近一次connect失败的token,这样的话feedback并不能预知这一次push的token种哪些失效了,还是无法避免在一个连接中给多个token发消息,中间有一个token失效,导致后续的所有消息都无法收到的问题。
athenaxp
2013-05-30 14:15:29 +08:00
@est
@ipconfiger 这样会不会被苹果干掉?我用10个线程跑,就会经常遇到连接超时了。
Cadina
2013-05-30 14:23:34 +08:00
遇到失效token导致的连接断开直接重新连接就可以了,没有别的办法,觉得太慢就加大并发。
有一点需要注意,就是token失效断开连接是有延时的,大概1-2s左右,但是不能每发送一条就等这么久,需要用select来提升性能,这样带来的问题是有可能失效的token后面又发送了几条连接才被关闭,这时候后面的其实是没有发送成功的,你需要维护一个队列,遇到这种情况的时候跳过那个失效的token从后面一条开始重试。
laputa7
2013-05-30 15:28:05 +08:00
@athenaxp 可以参考这个 https://github.com/duccio/ApnsPHP ,遇到失效的token被断开连接后会再重连,跳过失效的token推送下一个,发送前调用feedback服务是为了减少无效的推送,也就尽量避免了断开重连,但确实无法确保此次推送的token全部有效。
athenaxp
2013-05-30 16:39:11 +08:00
@laputa7
@Cadina thanks all.我准备对架构做大改了.
felinx
2013-05-30 17:11:06 +08:00
1. 断链之前一端时间内的要重发,所以消息要缓存一段供必要时回滚
2. apns feedback过来无效的token要清掉不再发,减少断链的可能
3. 尽量用异步、长链接方案
4. 我这每天大推时,单机1分钟大约推百万级ios设备。
nesuk
2015-10-29 10:22:24 +08:00
@felinx 冒昧请问最近是否依然关注 apns?
felinx
2015-10-29 11:28:38 +08:00
@nesuk 好老的帖被挖出来了,在关注的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX