-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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 这个参数? |
通过定时发送 ping message 为 WebSocket 传输模式添加心跳机制。未来可以改进为一段时间没有传输后发送。
为 ws 配置添加一项 heartbeat 配置,表示间隔固定时长发送 ping,单位为秒。默认为0,不指定时不发送ping,与当前行为一致。
(对xray和go都不太熟悉,如有疏漏请随意修改指正