【发布时间】:2016-01-27 11:05:10
【问题描述】:
我有一些 python 代码 sn-p 使用 asyncio 并启动“普通”连接:
loop = asyncio.get_event_loop()
coro = loop.create_connection(lambda: MyCustomClassProtocol(loop), sock=client_socket)
loop.run_until_complete(coro)
关键是一旦发生一些交换,我的普通连接就会切换到 tls 连接。以传统方式,人们会这样做:
ssl_sock = ssl.wrap_socket(client_socket, do_handshake_on_connect=False)
ssl_sock.do_handshake()
但我真的不知道如何使用asyncio 处理这个问题。我的data_received 方法虽然接收到加密内容,所以我想我可以做一些事情来解密它,但我无法弄清楚。
【问题讨论】:
-
Kamyar 是正确的:在 3.4 中没有官方方法可以做到这一点。有一个ticket open 可能会在 3.6 中得到修复。在那之前,我有一个超级hacky,保修无效的解决方法:
self._transport = self._loop._make_ssl_transport(self._transport._sock, self, ssl_context, server_side=True)。这假定您的协议在self._transport中保存了对传输的引用,并在self._loop中保存了对事件循环的引用。