[英]How to reliably and efficiently read all error responses from Apple Push Notifications Server in a Java Server?
我正在研究Java中Apple Push Notifications的服务器端开发。 我正在使用增强的格式,以便检测失败的消息并重新发送错误消息之后的消息。 我知道Apple不能保证发送推送通知,但是我希望能够知道Apple是否收到了我的消息以及其中是否包含任何错误。
我注意到当我尝试向Apple发送无效消息(无效设备令牌,有效载荷太大等)时,可以在关闭套接字之前再发送几条消息。 当套接字关闭时,从Apple读取错误代码为时已晚,因此我不知道哪个消息是错误的消息(或者即使有错误的消息,因为Apple表示即使没有消息连接也会偶尔关闭)错误)。
我在JavaPNs来源中看到的处理此问题的方法是在发送每条消息(或一组消息)后立即从Apple读取响应。 从套接字读取数据(如果频繁执行),并等待超时以防万一。 如果您不经常发送推送通知,则可以接受。
如果您尝试以高频率(每秒说几百个)发送大量通知,则在每条消息等待Apple的响应后都无法停止(即使您仅等待20ms的响应时间)限制您每秒发送50条消息,并且您无法知道Apple编写错误响应将花费多长时间,因此短暂的等待可能不够。 如果您不停地阅读每条消息后可能出现的错误,则可能会在向Apple发送消息的过程中关闭连接,否则您将无法获得导致连接关闭的消息的ID。 。
我正在考虑的另一种方法是在单独的线程中执行读取和写入操作。 这样,我有更好的机会从Apple(在关闭连接之前)获取错误消息,而不会影响我向Apple发送消息的速度。 这种方法在编程上更加复杂,并且由于我的服务器希望将APN发送到多个iOS应用程序,每个应用程序都需要自己的套接字和读取器/写入器线程,因此这将使我所需的线程数增加两倍。
尝试将推送通知发送到Apple的沙箱服务器时,已了解了APN服务器的所有上述行为。 我不确定Apple生产服务器的性能是否更好,并且不确定在生产服务器上执行测试是否是个好主意。
我的问题-有没有办法在关闭连接之前可靠地从Alpha读取错误响应,而又不牺牲性能? 服务器关闭套接字后,是否可以通过某种方式读取套接字的输入?
我遇到了与您相同的问题。 我尝试了两种方法,但是在关闭连接之前,没有一种方法可以可靠地读取Apple的错误响应:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.