我们正在为我们的应用程序使用APNS,并且在连接到APNS服务器后突然遇到很多延迟,我发现我们应该让连接保持打开状态。 我对stream_socket_client的工作方式一无所知,似乎无法找到这些问题的答案:
以下是我们的评论连接代码片段,每次需要发送通知时都会调用它(我们无法批量通知,因为我们的游戏是基于回合制的文字游戏 - Wordspionage - 有些紧张时间限制)。
stream_context_set_option($ ctx,' ssl',' local_cert',$ cert); stream_context_set_option($ ctx,' ssl',' passphrase',$ passphrase);
// Open a connection to the APNS server
$url = 'ssl://gateway.push.apple.com:2195';
$fp = stream_socket_client(
$url , $err,
$errstr, 4, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
感谢您的帮助!
答案 0 :(得分:1)
我可以回答你的一些问题:
每个应用程序都需要单独的连接,因为每个应用程序都有自己的推送证书,这是为了与APNS服务器建立TLS连接所必需的。
您不必关闭连接。 Apple可能随时关闭它(在这种情况下,您应该打开一个新的连接)。如果您发送无效数据(例如无效的设备令牌,太长的有效负载等等),它会将其关闭,但即使没有错误也可以关闭它。
您应该决定希望同时维护多少个打开的连接(基于发送通知的频率和发送通知的线程数)。每个应用程序至少需要一个连接,但您可能需要更多。对于每个打开的连接,您应该继续发送通知,直到发送失败,在这种情况下,您可以假设连接已关闭并打开一个新连接以替换它。
我不懂PHP,所以我无法帮助你。
此外,我建议您阅读this document中的Push Notification Throughput and Error Checking
。