【发布时间】:2014-11-05 11:06:41
【问题描述】:
所以我想实现一个简单的通信协议,其中读写完全异步。这意味着客户端发送一些数据,然后服务器可能会或可能不会响应答案。所以我不能只打电话给reader.read(),因为这会阻塞,直到至少返回一些东西。在此期间,我可能还有一些东西要发送。
那么有没有办法检查读者是否有东西要阅读? (请注意,我专门讨论的是流版本:我完全清楚协议版本具有用于读取和写入的单独处理程序,并且不会受到此问题的影响)
【问题讨论】:
所以我想实现一个简单的通信协议,其中读写完全异步。这意味着客户端发送一些数据,然后服务器可能会或可能不会响应答案。所以我不能只打电话给reader.read(),因为这会阻塞,直到至少返回一些东西。在此期间,我可能还有一些东西要发送。
那么有没有办法检查读者是否有东西要阅读? (请注意,我专门讨论的是流版本:我完全清楚协议版本具有用于读取和写入的单独处理程序,并且不会受到此问题的影响)
【问题讨论】:
没有办法询问读者有没有传入数据。
我想创建asyncio.Task 用于在循环中从异步流读取器读取数据。
如果您需要异步写入数据,请随时从任何具有一些传出数据的任务中调用 StreamWriter.write()。
我强烈不建议直接使用协议——它们是对流控制有用的低级抽象,但对于应用程序代码来说使用高级流更好。
【讨论】: