WebSocket
Processor¶
In the following text, the callable object used to handle WebSocket requests is referred to as a WebSocket processor.
Function Processor¶
At the beginning of a WebSocket processor, you must call await websocket.accept(), and when the processor exits, you must call await websocket.close(CLOSE_CODE).
from kui.asgi import websocket
async def simple_echo():
await websocket.accept()
try:
while True:
message = await websocket.receive_json()
await websocket.send_json(message)
finally:
await websocket.close(1000)
Class Processor¶
Similar to HTTP class processors, WebSocket class processors can inherit from kui.asgi.SocketView.
It has a class attribute: encoding, which can have several available values - "anystr", "text", "bytes", "json", determining how the received WebSocket data is parsed. The default value is anystr.
It has three methods for regular usage, corresponding to different states of a WebSocket connection:
-
on_connect()This function is called after a WebSocket connection is established.
If you override this function, you must explicitly call
await websocket.accept()within it to accept the connection. -
on_receive(data: typing.Any)This function is called when a complete data is received, and the type of
datais controlled by the class attributeencoding. -
on_disconnect(close_code: int)This function is called when a WebSocket is about to be closed.
If you override this function, you must explicitly call
await websocket.close(code=close_code)within it to close the connection.
Notice
All three functions must be defined as asynchronous functions using async def.