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

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

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

最佳答案

我遇到了与使用该库时遇到的问题相同的问题(我假设您实际上是在使用https://github.com/simonwhitaker/PyAPNs,这是我正在使用的。至少还有一个具有类似名称的库,但是我没有认为您会使用它)。

使用AAFIK时,使用简单的通知服务时,APNS服务器可能会挂断您,其原因包括:使用了不正确的 token ,请求格式错误等。或者如果您的网络连接中断或您的连接可能断开了。 PyAPNS代码目前无法很好地处理此类挂断,即使关闭了套接字,它也会尝试重用该套接字。我看到SSL3_WRITE_PENDING错误的经验是,我总是会在套接字上看到诸如“错误:[Errno 110]连接超时”之类的错误,然后在PyAPNS尝试重用套接字时出现SSL3_WRITE_PENDING错误。

如果看到服务器挂断,并且想知道为什么这样做,则有助于使用增强版本的APNS,以便服务器回写有关您做错了什么的信息。

碰巧的是,当前存在一个请求请求(https://github.com/simonwhitaker/PyAPNs/pull/23/files),该请求都使PyAPNS使用增强型APNS并更优雅地处理断开连接。您将看到我对该拉取请求进行了评论,并创建了自己的PyAPNS分支,以最适合我的用例的方式处理断开连接。

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

希望拉取请求将很快合并到母版中(可能还包括我的更改)。

09-25 20:54