2

所以我可以使用 apns_client 发送消息(最近因为 ssl 错误而使用 apns_clerk)

但现在我需要使用 eventlet 来实现非阻塞。

所以我被建议在一开始就去猴子补丁所有的图书馆。

所以我愿意

导入 eventlet eventlet.monkey_patch()

问题是现在我收到此错误并且无法发送消息:-

'警告:apns_clerk.backends.stdio:无法建立到('gateway.sandbox.push.apple.com',2195)的套接字/SSL连接(最后一次调用):文件“build/bdist.linux-x86_64/ egg/apns_clerk/backends/stdio.py”,第 168 行,在 _open_connection self._connect_and_handshake() 文件“build/bdist.linux-x86_64/egg/apns_clerk/backends/stdio.py”,第 205 行,在 _connect_and_handshake self._connection .do_handshake() WantReadError'

https://bitbucket.org/sardarnl/apns-client/overview

4

2 回答 2

0

请提供更多信息以调试您的问题: python -V python -c 'import eventlet; print(eventlet.__version__)' 您尝试连接的 URL 或重现问题的最少代码。

尝试更新到最新的 eventlet v0.16,有一个与 Python 2.7.9 相关的错误修复。

您可能想在这里打开一个问题https://github.com/eventlet/eventlet/issues/new

于 2015-01-13T11:41:16.290 回答
0

我使用 Python3.4.3 和 eventlet 0.17.4 并且有同样的问题。

看来我们应该使用 eventlet 的 OpenSSL 版本。这是我的(非常肮脏的)解决方法,现在想不出更好的方法:

  • 在 eventlet/green/OpenSSL/ init .py 中修复导入以与 python3 ( import rand-> from . import rand)兼容
  • 在 apns_clerk/backends/stdio.py 替换import OpenSSLfrom eventlet.green import OpenSSL.

这对我有用。(另一个问题是如果只有一个有效设备它会挂起,我通过添加«dummy»无效设备来解决它。)

我相信有更好的方法来apns_clerk使用绿色化的 OpenSSL,但我(还)无法弄清楚,因为eventlet文档对此非常沉默。

于 2015-09-01T20:38:34.197 回答