如何更改动作电缆导轨中的 ping 间隔
Posted
技术标签:
【中文标题】如何更改动作电缆导轨中的 ping 间隔【英文标题】:How to change ping interval in action cable rails 【发布时间】:2016-05-20 09:36:26 【问题描述】:我正在使用 ActionCable 并在每 3 秒间隔后从服务器接收 ping(在 ActionCable 库中提到)。 我的问题是:如何在订阅时更改 ping 间隔?
有什么想法吗?
【问题讨论】:
【参考方案1】:扩展@BoraMa 的回答:
您可以像这样覆盖后端的常量:
# config/initializers/action_cable.rb
module ActionCable
module Server
module Connections
BEAT_INTERVAL = 5
end
end
end
在客户端,您还需要覆盖该值:
// this should be after //= require action_cable
// but before any App.cable.subscriptions.create call
// the value here *must* be 2 times the backend's value
ActionCable.ConnectionMonitor.staleThreshold = 10;
请注意,这种方法通常是一个非常糟糕的主意:弄乱内部变量是导致错误和问题的直接方法之一。
事实上,ruby 甚至会警告你:
config/initializers/action_cable.rb:7: warning: already initialized constant ActionCable::Server::Connections::BEAT_INTERVAL
仅在您知道自己在做什么的情况下使用。
【讨论】:
【参考方案2】:有趣的是,从 Rails 5.0.0.rc1 开始,您似乎无法配置 ping 间隔。在ActionCable::Server::Connections module 中定义为常量。
您可能可以在初始化程序中重新定义此常量,以使服务器以不同的时间间隔发送 ping,但这最终仍无济于事,因为接收 ping 的客户端代码也具有静态定义的超时(设置为 6 秒,即服务器错过了两次 ping)。当它达到 6 秒超时而没有来自服务器的 ping 时,它会尝试重新连接。而且我不确定您如何覆盖this constant in the javascript client code。
从this github issue 来看,关于改进 ping 行为以使其更有用的可能方法正在进行一些相关的辩论,例如考虑到网络延迟。
但从本质上讲,这个间隔目前是不可配置的,除非你想要一个小于 3 秒的 ping 间隔,我现在看不出在 Rails 中覆盖它的简单方法。
【讨论】:
以上是关于如何更改动作电缆导轨中的 ping 间隔的主要内容,如果未能解决你的问题,请参考以下文章