FastAPI:WebSocket连接在约40秒后关闭

0tdrvxhp  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(96)

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

wj8zmpe1

wj8zmpe11#

uvicorn默认ping超时和间隔为20秒每(链接).有一个现在的设置来改变这些值,但从我可以告诉,ping超时不能在uvicorn中禁用. here is a github issue这是关闭没有完全解决/寻址.

相关问题