如何以非阻塞方式处理 websocket 数据



如何以非阻塞的方式处理 websocket 数据?

下面的示例演示,当调用 ws.recv() 并且未收到任何内容时,ws.recv() 会阻止其余代码运行:

from websocket import create_connection
url = 'ws://example.com'
ws = create_connection(url)
ws.recv()  # blocks

如何实现以下(不阻塞(的东西:

from websocket import create_connection
url = 'ws://example.com'
ws = create_connection(url)
# non-blocking
if ws.not_empty():
    ws.recv()  

如何以非阻塞方式处理 websocket 数据?

如果使用 Python>= 3.5 是一种选择,您可能需要查看允许您编写单线程但并发代码的asyncio。这通常可用于处理 I/O 绑定代码(如网络(。

请注意,如果这是您第一次使用asyncio,则有一些学习曲线。

一旦你熟悉了基础知识,有一个优秀的websockets模块,它利用了asyncio

https://pypi.python.org/pypi/websockets

最新更新