Rails Rails 使用 ActionCable 怎么才能实时监测用户在线情况?

WalkPhoneGo · December 10, 2018 · Last by WalkPhoneGo replied at March 20, 2020 · 2254 hits
  • 我知道手动触发 unsubscribe 是可以知道用户下线了。
  • ActionCable 的 disconnect 事件是不会立即触发的,大概要一分钟,ubuntu 18.04 测试

然后在已知上述两个条件的情况下,如果网络不好,用户断网了,服务器怎么知道他下线了?

请大佬们指条路,肥肠感谢!~

自己用 channel 实现一个 ping / pong 操作呀,你可设定连续两次未响应就算断线。

Reply to lyfi2003

真是太感谢了~ 开心😜

actioncale 有服务器发起的 ping,把这个调小了应该就可以了。

Reply to yfractal

https://stackoverflow.com/questions/37343163/how-to-change-ping-interval-in-action-cable-rails

修改 ping 不能满足需求,还是不会触发 disconnect,依然不知道客户端离线了

Reply to WalkPhoneGo

这个是怎么测试的?Stack Overflow 没看到相应的信息啊。

客户端发心跳包,服务端检查一下超时。

https://github.com/rails/rails/pull/32828/commits/9082ed512a3f1bd65c725bfeb49ef59f9c992b7f 有人提交了 pull request 如果 ping 客户端超过 5 次没有回应就认为客户端掉线了

Reply to w7938940

貌似并没有被合并到分支

而且我不知道怎么修改 Rails 源代码 这样做怎么上传到 GitLab?整个 Rails Gem 上传?

最新的 Rails5.2.2 还是不能马上监测用户掉线的 大概要 1 分钟

我使用一楼大神的建议完美解决了问题😊

Reply to yfractal

不好意思 我照着这个改的 改完还是不行

Reply to WalkPhoneGo

 可以分享下怎么实现的吗。。怎么发送 ping/pong 消息?

Reply to me7o

建议换 Phoenix Channel AC 实在是不适合做稳定性高的项目

You need to Sign in before reply, if you don't have an account, please Sign up first.