WebSocket config: Add heartbeatPeriod for client & server#4065
Conversation
|
em 没加config选项啊 |
|
yeah I agree with @Fangliding , it seem the keepalive mechanism should be handled by lower layer, eg. TCP/H2/QUIC |
|
|
Signed-off-by: hr567 <[email protected]>
|
所以你是遇到了这个问题吗,具体是什么中间件 |
我使用的CDN在代理WS时超时设置过小且目前无法设置,所以代理TCP连接时一段时间没有数据传输连接就会被迅速关闭,实测为出站设置更长的TCP keepalive对于我的CDN没有效果(比如用GPT的时候GPT正在思考,思考着思考着网络超时错误了 WebSocket虽然设计得也不好也快被抛弃了,不过目前在CDN支持是最完善的,使用xhttp在我的场景还有一些问题 |
|
其实与其在每个传输都塞 开mux也能保活连接 |
因为我的场景使用的是CDN且对延迟不敏感,开启 mux 多路复用对带宽利用的负面影响还挺大的。 mux 增加了协议的复杂性,在不需要多路复用的情况下为了连接保活开启 mux 感觉有些多余,而且 mux 也没有暴露 keepalive 间隔的配置项。 |
|
這個 pull request 能解決長連接問題嗎? 一個典型用例是通過 Xray 代理來連 ssh,容易遇到連接被中斷、無法保持的問題,尤其是在等待命令的時候。 |
|
ssh有自己的保活的 设置了也断是被掐了 |
这个配置只能解决长连接中ws传输超时的问题,实际上还需要根据具体的应用等多个方面综合来看
具体到SSH可以尝试通过配置调整缩短保活的时间间隔,较短的心跳包间隔也许能避免连接被中断 |
heartbeat for client & server
heartbeat for client & serverheartbeatPeriod for client & server
|
为了和另一个 PR 像一些,改名 heartbeatPeriod, |
|
感谢 PR,你试下配置 heartbeatPeriod 是否有效 |
已测试通过配置解决了TCP空闲时断连问题,感谢各位大佬的Review |
|
httpupgrade 是不是也可以使用 heartbeatPeriod 这个参数? |
XTLS#4065 (comment) --------- Co-authored-by: RPRX <[email protected]>
通过定时发送 ping message 为 WebSocket 传输模式添加心跳机制。未来可以改进为一段时间没有传输后发送。
为 ws 配置添加一项 heartbeat 配置,表示间隔固定时长发送 ping,单位为秒。默认为0,不指定时不发送ping,与当前行为一致。
(对xray和go都不太熟悉,如有疏漏请随意修改指正