涉及发送和接收的服务器代码是否必须是异步的?

时间:2017-03-23 22:59:45

标签: python websocket tornado python-asyncio

我开始使用websockets。试图为基于浏览器的(javascript)客户端编写python服务器。

我之前从未真正完成异步编程(“事件”除外)。我试图避免它 - 我搜索并搜索了一个使用websocket的例子,涉及导入龙卷风或asyncio。但我什么都没发现,即使是“最基本的例子”也是如此。

所以现在我正在内化它,但为我清除它 - “全双工”服务器代码必然是异步的吗?

1 个答案:

答案 0 :(得分:0)

全双工服务器必须并发。在Tornado和asyncio中,并发性基于异步编程模型,因此如果您使用基于其中一个包的websocket库,则您的代码将需要是异步的。

但这不是唯一的方法:全双工websockets可以通过专用线程从连接读取(除了你正在使用的任何其他线程)以同步方式实现。我不知道是否有任何python websocket实现支持这种全双工的多线程模型,但这就是Go的websocket实现的工作原理。

也就是说,异步/事件驱动模型非常适合websockets(它是javascript方面的一切工作方式),所以我鼓励你对这个模型感到满意,而不是试图找到一种工作方式与websockets同步。