如何阻止我的 websocket 连接关闭?
How can I stop my websocket connection from closing?
我是 websockets 和 asyncio 的新手,我正在尝试让一个简单的示例起作用。我想创建一个服务器,它接受来自多个客户端的连接,并同时 运行s 一个循环,每秒向每个连接发送一次消息。我也在尝试使用 asyncio.run() 我认为它比许多示例所基于的 get_event_loop() 代码更受欢迎。
到目前为止,这是我的代码:
import asyncio
import websockets
USERS = set()
async def register(websocket, path):
USERS.add(websocket)
await websocket.send("Successfully registered")
async def count():
count = 0
while True:
print(f"Iteration: {count}")
if USERS:
for user in USERS:
await user.send("Sending message back to client")
await asyncio.sleep(1)
count +=1
async def serve():
server = await websockets.serve(register, 'localhost', 8765)
await server.wait_closed()
print("Server closed")
async def main():
await asyncio.gather(count(), serve())
asyncio.run(main())
当我 运行 这个计数协程工作时,直到我从客户端建立连接。此时连接已成功注册,但是当我尝试在 count() 中将消息发送回客户端时,我收到错误消息,因为连接已关闭。我应该如何更改我的代码以阻止这种情况发生?
How should I change my code to stop this from happening?
问题可能是您的处理程序 register
协程立即返回,这会提示 websockets 关闭连接。尝试像这样更改它:
async def register(websocket, path):
USERS.add(websocket)
await websocket.send("Successfully registered")
await asyncio.Event().wait()
如果有帮助,您可以将事件与 websocket 一起放在 USERS
中,这样您就可以在需要时终止与客户端的连接。
我是 websockets 和 asyncio 的新手,我正在尝试让一个简单的示例起作用。我想创建一个服务器,它接受来自多个客户端的连接,并同时 运行s 一个循环,每秒向每个连接发送一次消息。我也在尝试使用 asyncio.run() 我认为它比许多示例所基于的 get_event_loop() 代码更受欢迎。
到目前为止,这是我的代码:
import asyncio
import websockets
USERS = set()
async def register(websocket, path):
USERS.add(websocket)
await websocket.send("Successfully registered")
async def count():
count = 0
while True:
print(f"Iteration: {count}")
if USERS:
for user in USERS:
await user.send("Sending message back to client")
await asyncio.sleep(1)
count +=1
async def serve():
server = await websockets.serve(register, 'localhost', 8765)
await server.wait_closed()
print("Server closed")
async def main():
await asyncio.gather(count(), serve())
asyncio.run(main())
当我 运行 这个计数协程工作时,直到我从客户端建立连接。此时连接已成功注册,但是当我尝试在 count() 中将消息发送回客户端时,我收到错误消息,因为连接已关闭。我应该如何更改我的代码以阻止这种情况发生?
How should I change my code to stop this from happening?
问题可能是您的处理程序 register
协程立即返回,这会提示 websockets 关闭连接。尝试像这样更改它:
async def register(websocket, path):
USERS.add(websocket)
await websocket.send("Successfully registered")
await asyncio.Event().wait()
如果有帮助,您可以将事件与 websocket 一起放在 USERS
中,这样您就可以在需要时终止与客户端的连接。