PyAPNS SSL3_WRITE_PENDING错误

时间:2012-08-20 18:19:58

标签: python ios apple-push-notifications

我在我的应用程序的演示中使用PyAPNS模块和Bottle框架向所有已注册的设备发送推送通知。 一开始一切正常,我已经按照手册进行了PyAPNS。但是一段时间后我的服务在服务器后台运行,我开始收到错误:

SSLError:[Errno 1] _ssl.c:1217:错误:1409F07F:SSL例程:SSL3_WRITE_PENDING:错误的写入重试

重新启动服务后,一切正常。我该怎么办?或者我应该如何在后台运行此类服务? (现在我只是在另一个屏幕上运行它)

1 个答案:

答案 0 :(得分:4)

我遇到了与使用这个库时相同的问题(我假设你实际上正在使用https://github.com/simonwhitaker/PyAPNs,这正是我正在使用的。至少有一个其他的lib有一个相似的名字,但我不认为你会使用它。)

AFAIK当您使用简单通知服务时,APNS服务器可能会挂起您,原因包括:使用不正确的令牌,请求格式错误等。或者,如果您的网络连接中断,您的连接可能会中断或者您。 PyAPNS代码现在没有非常优雅地处理这样的挂起,它甚至在关闭后尝试重新使用套接字。我看到SSL3_WRITE_PENDING错误的经验是,我总是会看到错误,例如“错误:[Errno 110]连接超时”发生在套接字上,然后当PyAPNS尝试重新使用套接字时,我会收到SSL3_WRITE_PENDING错误。 / p>

如果您看到服务器挂断,并且您想知道它为什么会这样做,那么使用增强版APNS会有所帮助,这样服务器就会回写有关您做错的信息。

实际上,目前有一个拉取请求(https://github.com/simonwhitaker/PyAPNs/pull/23/files),它们都会使PyAPNS使用增强的APNS并更优雅地处理断开连接。您将看到我对该pull请求发表了评论,并创建了我自己的PyAPNS分支,以最适合我的用例的方式处理断开连接。

因此,您可以使用pull请求中的代码来查找APNS服务器挂断您的原因。和/或您可以使用它来简化故障恢复,这样您只需在抛出异常时重试发送,而不必重新创建APNS对象。

希望拉请求很快就会合并为主人(也可能包括我的更改)。