ActionCable 频道实例是不是在客户端之间共享?

Posted

技术标签:

【中文标题】ActionCable 频道实例是不是在客户端之间共享?【英文标题】:Are ActionCable Channels instances shared across clients?ActionCable 频道实例是否在客户端之间共享? 【发布时间】:2017-02-18 17:16:43 【问题描述】:

我通过公共 IP 地址识别连接。直到最近我的理解(怀疑)是在这种情况下,客户订阅频道将重用相同的频道实例。

一个真实的例子如下:

我正在构建一个应用程序,该应用程序从不属于我的某个来源请求信息。这是通过 HTTP 请求和 Job 完成的。外部资源以周期性的时间间隔变化。

继承自 ApplicationCable::Channel 的 DataChannel 类管理最后一个请求的缓存,因此从同一 IP 地址订阅的新客户端不会启动新请求,而是重用最后一个请求。

总结:

如果我打开两个选项卡并且每个选项卡都订阅一个频道,即使连接标识符相同,我是否会获得两个 Channel 实例?

我不是在寻找一种方法来做到这一点,只是为我指明正确的方向就足够了,而且实际上更有价值。

【问题讨论】:

好像不是,因为我在开发环境,我会在生产环境中测试。根据我想做的,我最终使用了 Redis DLM。 【参考方案1】:

不,他们不是。

我需要在客户端拥有的所有实例之间添加一些同步,连接用 IP 地址标识。

为此,我使用了 Redis DLM,因此我可以获取和释放锁,从而执行旨在唯一的计算。

可能有更好的方法来做到这一点,但我无法想象不需要修补 ActionCable 源的方法。一如既往地感谢任何进一步的评论。

【讨论】:

以上是关于ActionCable 频道实例是不是在客户端之间共享?的主要内容,如果未能解决你的问题,请参考以下文章

ActionCable 不再在生产环境中工作

如何使用 RSpec 测试 ActionCable 频道?

在 Rails 中广播消息时未调用 ActionCable 频道

(GoRails)ActionCable如何用Redis.

适用于 Android 的动作电缆客户端

凤凰频道的广播如何影响其他节点上的客户端?