Skip to content
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

Linux下,WebSocket Server关闭一个超时连接失效,没触发OnSessionClosedAsync #773

Open
shenyang1007 opened this issue Dec 30, 2024 · 3 comments
Assignees
Labels
2.0 SuperSocket 2.0

Comments

@shenyang1007
Copy link

shenyang1007 commented Dec 30, 2024

应用场景:
1.Linux操作系统 ,Almalinux,与redhat8相同
2.supersocket2.0.0-beta.28,websokcet server服务
3.连接超时需要断开连接,触发断开事件,做掉线业务处理。

问题:
1.通过看2.0源码发现是通过LastActiveTime来判断连接是否活跃的,但这里客户端发送消息与服务器发送消息都会重写该时间,所以当网络不好时(如关闭网络时),这时虽然客户端无法发送消息,但服务器不知道该连接断开,还是会不停给该连接发送消息(业务需要),这里LastActiveTime都是会不停刷新最新时间,没法断开。
2.自己写了一个超时业务判断 (心跳处理),只判断接收客户端发送消息的时间,也就是服务端接收到该连接发送的消息时间,如果大于超时限制时间时就手动断开连接,session.Connection.CloseAsync(CloseReason.TimeOut);,与ss2.0底层使用相同方法,这时虽然调用,但无法真正关闭,没触发OnSessionClosedAsync。其实这时服务端还是不停向该连接发送消息,不知是不是这里有判断 该连接pipe有消息,所以不会断开?
3.windows 平台不会出现该情况,在网络关闭后30s时间,服务端发送消息时会抛出异常,触发断开事件。
4.almalinux中,在网络关闭后15m的样子,也是发送消息会抛出异常,触发断开事件。

结果 :
1.希望close连接时,能立即触发断开事件,方便业务处理。根据自己超时判断业务,
2.能优化ss2.0底层库超时处理就更好

@kerryjiang kerryjiang added the 2.0 SuperSocket 2.0 label Dec 30, 2024
@kerryjiang kerryjiang self-assigned this Dec 30, 2024
@kerryjiang
Copy link
Owner

kerryjiang commented Dec 30, 2024

await SendOverIOAsync(buffer, CancellationToken.None).ConfigureAwait(false); ;
UpdateLastActiveTime();

@shenyang1007
Copy link
Author

上面代码是发送时更新最后活跃时间,这个我知道。但我现在问题是,我自己写了一个SessionManager,自己根据心跳来判断是否超时,然后手动调用session.Connection.CloseAsync(CloseReason.TimeOut),或是session.CloseAsync(),连接没有关闭掉,一直存在。

@AsenLins
Copy link

AsenLins commented Jan 8, 2025

网络是不可靠的,你的SessionManger不应该管理连接的关闭,只需要调度Session就行了,连接关闭应该交给SuperSocket本身即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2.0 SuperSocket 2.0
Projects
None yet
Development

No branches or pull requests

3 participants