我正在使用asyncio的流向SSL服务器发出请求。
这是一个示例方法。
async def make_request():
async with asyncio.connect('127.0.0.1', 8888, ssl=ssl.SSLContext()) as stream:
await stream.write(REQUEST)
print(await stream.read(RESPONSE_LENGTH))
某些服务器完成了SS1握手,接收到请求但不发送任何响应。这会使方法按预期卡在stream.read
调用上。
在这种情况下,我想为读取调用定义超时。我试图通过添加wait_for
来实现这一点。
print(await asyncio.wait_for(stream.read(RESPONSE_LENGTH),timeout=2))
但是,此方法无效,并且会无限期地阻塞。
此外,如果我们使用普通的TCP连接,那么我建议的修复程序会很好地工作。
我的解决方案出了什么问题?是否有其他方法可以实现?