1

我正在开发一个向我的 iPhone 应用程序发送推送通知的简单 Web 服务器。我尝试过使用现有的 Python 包,但它们都遇到了这个问题:

当发送无效令牌时,Apple 将发回错误消息并关闭套接字。我需要发送大量推送通知,但如果其中一个的令牌无效,其余的将不会发送给 Apple。

所以目前,我的代码看起来像这样:

for m in messages:
    socket.send(m)

但是当第一条消息的令牌无效时,Apple在收到第一条消息后立即关闭套接字,套接字仍然发送所有消息而没有任何错误。

我负担不起recv在每条消息后都超时,因为这将花费太长时间。我该怎么做才能知道套接字何时关闭并打开一个新的?

4

2 回答 2

1

如果套接字已在另一端关闭,则recv它应该返回0或导致错误。


您可以检查发送的字节数send


更新:您可能想在这里阅读另一种可能性来监视套接字连接是否仍然存在。


Update-1:另一种方法可能是在写入操作的同时在相关套接字上运行一个不断读取的线程......正如你提到的:时间是你的极限。

于 2012-05-06T06:15:14.883 回答
0

我了解到,在 TCP 级别我无法找出发送了哪些数据包。我决定只发送所有消息,然后等待(超时)来自 Apple 的任何错误消息。如果有任何错误,请重复发送失败的错误。

我决定这样做,因为获得无效令牌应该是罕见的事件,并且大多数情况下所有通知都会通过。

于 2012-05-06T07:36:43.473 回答