我尝试使用Zephyr RTOS的WebSocket库在FastAPI WebSocket端点和客户端之间ping/pong json包。不幸的是,FastAPI服务器在大约40秒后关闭了连接。这个时间似乎是恒定的。我猜测,由于缺少/错误的条件,一定会发生超时事件。
这个post似乎解决了我的问题。不幸的是,我的代码是not running with a newer uvicorn version,它将支持--ws-ping-interval或--ws-ping-timeout。
对于一个简单的测试,我做了以下几点:
服务器端:
@app.websocket("/ws/update_status")
async def websocket_endpoint(websocket: WebSocket, db: Session = Depends(get_db)):
await websocket.accept()
while True:
data = await websocket.receive_json()
await websocket.send_json('{"status":"ok"}')
字符串
客户端(在Zephyr-RTOS上运行的C代码):
// some code to define JSON package
while(1)
{
websocket_send_msg(sock, send_buffer, json_length, WEBSOCKET_OPCODE_DATA_TEXT, true, true, SYS_FOREVER_MS);
websocket_recv_msg(sock, receive_buffer, sizeof(receive_buffer), &message_type, 0, SYS_FOREVER_MS);
}
型
我使用以下软件包版本:
uvicorn=='0.13.4'
fastapi=='0.68.2'
型
有谁知道为什么连接在40秒后中止,以及如何避免?
1条答案
按热度按时间wj8zmpe11#
uvicorn默认ping超时和间隔为20秒每(链接).有一个现在的设置来改变这些值,但从我可以告诉,ping超时不能在uvicorn中禁用. here is a github issue这是关闭没有完全解决/寻址.