我尝试使用 Zephyr RTOS 的 websocket 库在 FastAPI websocket 端点和客户端之间 ping/pong json 包。不幸的是,FastAPI 服务器在大约 40 秒后关闭了连接。这个时间似乎是恒定的。我的猜测是,由于缺少/错误的条件,必须发生超时事件。
这篇文章似乎解决了我的问题。不幸的是,我的代码没有运行支持--ws-ping-interval 或--ws-ping-timeout 的较新版本的uvicorn。
对于一个简单的测试,我做了以下事情:
服务器端:
@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 秒后中止以及如何避免?