Flask-SocketIO 放在 nginx 后面要配什么?没配会怎样?空闲连接会不会被代理掐掉?WebSocket 比 polling 快多少?这篇用真实的 nginx 与 python-socketio 客户端,把答案量出来(基本的握手与房间见第 78 篇)。
[没有配置 Upgrade 头]
只允许 websocket 失败:ConnectionError: Connection error
默认(polling 再升级) 连接成功,传输方式 polling
[配置了 proxy_http_version 1.1 + Upgrade + Connection]
只允许 websocket 连接成功,传输方式 websocket
默认(polling 再升级) 连接成功,传输方式 websocket上一篇:Server-Sent Events;下一篇:Flask Test Client。
nginx 是自己起的实例(自签证书)。我第一次测试时给客户端写了自定义的 Host 头,结果 websocket 连接一直失败,去掉后才正常——那是我的测试写法的问题,不是 nginx 的行为。
ping_interval=25(默认) 空闲 7 秒后客户端是否还连着:False(断开发生在约 3.0 秒)| 服务端日志:['connect transport=websocket', 'disconnect reason=transport close'] ping_interval=1 空闲 7 秒后客户端是否还连着:True(断开发生在约 7.1 秒)| 服务端日志:['connect transport=websocket']
websocket 中位数 0.38 ms,p95 0.77 ms polling 中位数 1.57 ms,p95 1.88 ms