这段代码过50秒会报错 错误代码 websockets.exceptions.ConnectionClosedError: sent 1011 (unexpected error) keepalive ping timeout; no close frame received
时间: 2024-03-03 10:50:10 浏览: 36
这个错误是因为 WebSocket 连接没有及时发送心跳包,导致服务器认为连接已经断开而主动关闭了连接。
为了避免这个错误,你可以在服务器端设置一个定时器来定期发送心跳包,以保持连接的活跃状态。以下是一个修改后的代码示例:
```python
import asyncio
import websockets
async def handle_client(websocket, path):
while True:
try:
message = await asyncio.wait_for(websocket.recv(), timeout=50)
print(f"Received message: {message}")
await websocket.send(f"Echoing back your message: {message}")
except asyncio.TimeoutError:
await websocket.ping() # 发送心跳包,保持连接状态
async def main():
async with websockets.serve(handle_client, "localhost", 8000):
print("Server started!")
await asyncio.Future() # keep running until Ctrl-C
if __name__ == "__main__":
asyncio.run(main())
```
上述代码中,我们使用了 `asyncio.wait_for` 函数来设置了一个 50 秒的超时时间,如果在超时时间内没有收到客户端的消息,就会主动发送一个心跳包来保持连接状态。这样可以避免服务器认为连接已经断开而主动关闭连接的情况。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)