Websockets#
Sanic 在 websockets 之上提供了易于使用的抽象。
路由#
Websocket
处理程序可以像常规处理程序一样挂接到路由器。
from sanic import Request, Websocket
async def feed(request: Request, ws: Websocket):
pass
app.add_websocket_route(feed, "/feed")
from sanic import Request, Websocket
@app.websocket("/feed")
async def feed(request: Request, ws: Websocket):
pass
Websocket 处理器#
通常,websocket 处理程序会希望保持一个循环打开。
然后,它可以在注入到处理程序的第二个对象上使用 send()
和 recv()
方法。
这个例子是简单的端点,它将收到的客户端消息回显回去。
from sanic import Request, Websocket
@app.websocket("/feed")
async def feed(request: Request, ws: Websocket):
while True:
data = "hello!"
print("Sending: " + data)
await ws.send(data)
data = await ws.recv()
print("Received: " + data)
你可以通过在 for
循环中迭代 Websocket 对象来简化你的循环。
from sanic import Request, Websocket
@app.websocket("/feed")
async def feed(request: Request, ws: Websocket):
async for msg in ws:
await ws.send(msg)
Websocket 默认配置#
app.config.WEBSOCKET_MAX_SIZE = 2 ** 20
app.config.WEBSOCKET_PING_INTERVAL = 20
app.config.WEBSOCKET_PING_TIMEOUT = 20