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