ActionCable Channels 实例是否在客户端之间共享?
Are ActionCable Channels instances shared across clients?
我通过 public IP 地址识别连接。直到最近我的理解(怀疑)是在这种情况下,客户订阅一个频道将重用相同的频道实例。
真实世界的例子如下:
我正在构建一个应用程序,它从不属于我的某个来源请求信息。这是通过 HTTP 请求和作业完成的。外部资源以周期性时间间隔变化。
我的 DataChannel class,继承自 ApplicationCable::Channel 管理最后一个请求的缓存,因此从同一 IP 地址订阅的新客户端不会启动新请求,而是重用最后一个请求一.
总结:
如果我打开两个选项卡并且每个选项卡都订阅了一个频道,即使连接标识符相同,我是否会得到两个频道实例?
我不是在寻找这样做的方法,只要给我指出正确的方向就足够了,而且实际上更有价值。
不,他们不是。
我需要在客户端拥有的所有实例之间添加一些同步,这些实例具有用 IP 地址标识的连接。
为此,我使用了 Redis DLM,因此我可以获取和释放锁,从而执行旨在唯一的计算。
可能有更好的方法,但我无法想象不需要修补 ActionCable 源的方法。一如既往地感谢任何进一步的评论。
我通过 public IP 地址识别连接。直到最近我的理解(怀疑)是在这种情况下,客户订阅一个频道将重用相同的频道实例。
真实世界的例子如下:
我正在构建一个应用程序,它从不属于我的某个来源请求信息。这是通过 HTTP 请求和作业完成的。外部资源以周期性时间间隔变化。
我的 DataChannel class,继承自 ApplicationCable::Channel 管理最后一个请求的缓存,因此从同一 IP 地址订阅的新客户端不会启动新请求,而是重用最后一个请求一.
总结:
如果我打开两个选项卡并且每个选项卡都订阅了一个频道,即使连接标识符相同,我是否会得到两个频道实例?
我不是在寻找这样做的方法,只要给我指出正确的方向就足够了,而且实际上更有价值。
不,他们不是。
我需要在客户端拥有的所有实例之间添加一些同步,这些实例具有用 IP 地址标识的连接。
为此,我使用了 Redis DLM,因此我可以获取和释放锁,从而执行旨在唯一的计算。
可能有更好的方法,但我无法想象不需要修补 ActionCable 源的方法。一如既往地感谢任何进一步的评论。