流套接字客户端持久性它保持打开多长时间以及如何确认没有重复的连接

时间:2014-03-13 16:30:29

标签: php sockets ssl push-notification apple-push-notifications

我们正在为我们的应用程序使用APNS,并且在连接到APNS服务器后突然遇到很多延迟,我发现我们应该让连接保持打开状态。 我对stream_socket_client的工作方式一无所知,似乎无法找到这些问题的答案:

  • 我们正在向2个不同的应用程序发送通知,这些应用程序有2个不同的证书,两个都重用的连接是否同时为每个应用程序打开?
  • 连接的生命周期是多少?它是自动关闭还是我们需要写一些会不时关闭它们的东西?
  • 如何查看打开的连接数及其信息,以确保我们不会出现重复或过多的打开连接?
  • 使用STREAM_CLIENT_ASYNC_CONNECT代替STREAM_CLIENT_PERSISTENT是否有任何优势? async也持久吗?

以下是我们的评论连接代码片段,每次需要发送通知时都会调用它(我们无法批量通知,因为我们的游戏是基于回合制的文字游戏 - 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);

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我可以回答你的一些问题:

  1. 每个应用程序都需要单独的连接,因为每个应用程序都有自己的推送证书,这是为了与APNS服务器建立TLS连接所必需的。

  2. 您不必关闭连接。 Apple可能随时关闭它(在这种情况下,您应该打开一个新的连接)。如果您发送无效数据(例如无效的设备令牌,太长的有效负载等等),它会将其关闭,但即使没有错误也可以关闭它。

  3. 您应该决定希望同时维护多少个打开的连接(基于发送通知的频率和发送通知的线程数)。每个应用程序至少需要一个连接,但您可能需要更多。对于每个打开的连接,您应该继续发送通知,直到发送失败,在这种情况下,您可以假设连接已关闭并打开一个新连接以替换它。

  4. 我不懂PHP,所以我无法帮助你。

  5. 此外,我建议您阅读this document中的Push Notification Throughput and Error Checking