2

我尝试使用 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 秒后中止以及如何避免?

4

0 回答 0