1 回答

TA貢獻1804條經驗 獲得超2個贊
recv() 和 send() 都會在關閉的連接上引發 websockets.exceptions.ConnectionClosed 。在那里進行清理工作。
以下是對文檔中的 websocket Web 示例的輕微修改:
import asyncio
import datetime
import random
import websockets
async def time(websocket, path):
? ? while True:
? ? ? ? now = datetime.datetime.utcnow().isoformat() + "Z"
? ? ? ? try:
? ? ? ? ? ? await websocket.send(now)
? ? ? ? except websockets.exceptions.ConnectionClosed:
? ? ? ? ? ? print("Client disconnected.? Do cleanup")
? ? ? ? ? ? break? ? ? ? ? ? ?
? ? ? ? await asyncio.sleep(random.random() * 3)
start_server = websockets.serve(time, "127.0.0.1", 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
客戶端示例:
import asyncio
import websockets
async def hello():
? ? uri = "ws://localhost:5678"
? ? count = 5
? ? async with websockets.connect(uri) as websocket:
? ? ? ? while count > 0:
? ? ? ? ? ? greeting = await websocket.recv()
? ? ? ? ? ? print(f"< {greeting}")
? ? ? ? ? ? count = count - 1
asyncio.get_event_loop().run_until_complete(hello())
添加回答
舉報