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

WalkPhoneGo · 2018年12月10日 · 最后由 WalkPhoneGo 回复于 2020年03月20日 · 1458 次阅读
  • 我知道手动触发 unsubscribe 是可以知道用户下线了。
  • ActionCable 的 disconnect 事件是不会立即触发的,大概要一分钟,ubuntu 18.04 测试

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

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

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

lyfi2003 回复

真是太感谢了~ 开心😜

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

yfractal 回复

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

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

WalkPhoneGo 回复

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

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

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

w7938940 回复

貌似并没有被合并到分支

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

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

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

yfractal 回复

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

WalkPhoneGo 回复

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

me7o 回复

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册