我看过很多关于这方面的教程和意见--我已经开发了一个简单的脚本,它将发送批量的通知到Apple服务器,并且我每隔5秒执行一次任务。(到目前为止,它是php,应该很快就会改进)。
这样,代码很简单,如果1个批次更大,则不会延迟下一个批次。它还允许在多个服务器上运行,以便更快地调度,并解决任何并发问题
然而,我不清楚苹果对我每5秒打开/关闭一个插座的容忍度……在沙盒模式下,它可以完美地工作。
谢谢你的建议
发布于 2014-04-05 18:19:14
这种方法怎么样:-在某种数据结构中进行批处理(我不知道PHP,但在Objective-C中,这是一个包含一些自定义NotificationClass或NSDictionaries实例的NSArray )。-如果A)批处理了超过X个通知,或者B)等待了一定的时间(例如5秒)。
根据推送通知的用途,您可以调整这些变量。例如,聊天应用程序希望它们立即发送,而一些日常消息应用程序可能可以每隔一个小时左右一次性发送所有这些消息。
此外,苹果关于开放连接的话:
您可以与同一网关或多个网关实例建立多个连接。如果您需要发送大量推送通知,请将它们分散在多个不同网关的连接上。与使用单个连接相比,这提高了性能:它可以让您更快地发送推送通知,也可以让APN更快地发送它们。
在多个通知中保持与APN的连接打开;不要重复打开和关闭连接。an将快速连接和断开连接视为拒绝服务攻击。除非您知道连接将在较长时间内处于空闲状态,否则您应该将其保持打开状态-例如,如果您每天只向用户发送一次通知,则每天使用新连接是可以的。
有关官方文档(Best practies for Managing Connections),请参阅此处。
发布于 2014-04-05 18:43:31
其想法是,您只需保持批处理之间的连接打开。事实上,苹果建议你创建多个连接,这样你就可以将这1000个连接划分为5个或10个左右的连接。您可以在代码中使用一些连接管理器来控制连接的生命周期:如果在x个时间内没有消息发送,则将其关闭。如果某些客户端代码请求连接,该管理器要么创建一个新的连接,要么返回当前未用于发送数据的连接。此管理器的客户端应该准备好不接收连接,并且连接管理器应该反过来通知客户端连接的可用性。
在架构方面有很多可能性,但主要的一点是,最好让连接打开并空闲一段时间,然后多次打开和关闭它们。
https://stackoverflow.com/questions/22884606
复制