python-socketio文档2--(客户端)

Socket.IO 客户端

本软件包包含两个 Socket.IO 客户端:

  • “简单(simple)” 客户端:它提供了一种直观的 API,足以满足大多数应用程序的需求。
  • “事件驱动(event-driven)” 客户端:它允许访问 Socket.IO 协议的所有功能。

每个客户端都有两个版本:一个用于标准 Python 库,另一个用于使用asyncio包构建的异步应用程序。

安装

要安装标准 Python 客户端及其依赖项,请使用以下命令:

pip install "python-socketio[client]"

如果打算使用asyncio客户端,则使用以下命令:

pip install "python-socketio[asyncio_client]"

使用简单客户端

简单客户端的优点在于,它抽象了维护 Socket.IO 连接所需的逻辑。这个客户端以完全透明的方式处理断开连接和重新连接,不会给应用程序增加任何复杂性。

创建客户端实例

创建 Socket.IO 客户端最简单的方法是使用上下文管理器接口:

# 标准Python
import socketio

with socketio.SimpleClient() as sio:
    # ...连接到服务器并使用客户端
    # ...无需手动断开连接!

# asyncio
import socketio

async with socketio.AsyncSimpleClient() as sio:
    # ...连接到服务器并使用客户端
    # ...无需手动断开连接!

使用这种方式时,上下文管理器会确保在退出withasync with代码块之前正确断开客户端连接。

如果愿意,也可以手动实例化客户端:

# 标准Python
import socketio
sio = socketio.SimpleClient()

# asyncio
import socketio
sio = socketio.AsyncSimpleClient()

连接到服务器

通过调用connect()方法建立与服务器的连接:

sio.connect('http://localhost:5000')

对于asyncio客户端,该方法是一个协程:

await sio.connect('http://localhost:5000')

默认情况下,客户端首先使用长轮询传输连接到服务器,然后尝试将连接升级为使用 WebSocket。要直接使用 WebSocket 连接,可以使用transports参数:

sio.connect('http://localhost:5000', transports=['websocket'])

连接建立后,服务器会为客户端分配一个唯一的会话标识符。应用程序可以在sid属性中找到这个标识符:

print('my sid is', sio.sid)

连接中使用的 Socket.IO 传输方式可以从transport属性中获取:

print('my transport is', sio.transport)

传输方式以字符串形式给出,可以是'websocket''polling'

TLS/SSL 支持

客户端支持 TLS/SSL 连接。要启用它,可以使用https://连接 URL:

sio.connect('https://example.com')

在使用asyncio时:

await sio.connect('https://example.com')

客户端默认会验证服务器证书。有关如何自定义此行为的信息,请参考事件驱动客户端的文档。

发送事件

客户端可以使用emit()方法向服务器发送事件:

sio.emit('my message', {'foo': 'bar'})

asyncio中,则作为协程使用:

await sio.emit('my message', {'foo': 'bar'})

该方法的参数是要发送的事件名称和可选的数据,这些数据会被传递给服务器。数据类型可以是strbytesdictlisttuple。当发送listtuple时,其中的元素必须是除tuple之外的任何允许类型。当使用tuple时,元组中的元素将作为单独的参数传递给服务器端的事件处理函数。

接收事件

客户端可以使用receive()方法等待服务器发送事件:

event = sio.receive()
print(f'received event: "{event[0]}" with arguments {event[1:]}')

在使用asyncio时,这个方法需要被等待:

event = await sio.receive()
print(f'received event: "{event[0]}" with arguments {event[1:]}')

receive()的返回值是一个列表。这个列表的第一个元素是事件名称,其余元素是服务器传递的参数。

使用上述方法时,receive()<