Ruby on rails 如何根据另一个客户端(rails中)发出的请求更新网页?

Ruby on rails 如何根据另一个客户端(rails中)发出的请求更新网页?,ruby-on-rails,websocket,Ruby On Rails,Websocket,这是我的需要: 我必须显示网页上的一些信息。 web浏览器实际上位于同一台计算机上(本地主机)。 我希望数据由服务器主动动态更新 由于HTTP协议实际上是一个请求/响应协议,我知道要获得此功能,服务器和客户端(在这里是本地的)之间的连接应该以某种方式保持打开(Websocket、服务器发送事件等) 是的,“实时”现在真的是一种流行趋势,有很多框架可以做到这一点(meteor等…) 事实上,除了使用WebSocket(Rails 4中的服务器发送事件和Rails 5中的ActionCable)之外

这是我的需要: 我必须显示网页上的一些信息。
web浏览器实际上位于同一台计算机上(本地主机)。
我希望数据由服务器主动动态更新

由于HTTP协议实际上是一个请求/响应协议,我知道要获得此功能,服务器和客户端(在这里是本地的)之间的连接应该以某种方式保持打开(Websocket、服务器发送事件等)

是的,“实时”现在真的是一种流行趋势,有很多框架可以做到这一点(meteor等…)

事实上,除了使用WebSocket(Rails 4中的服务器发送事件和Rails 5中的ActionCable)之外,Rails似乎也支持这种功能性
所以实现这个功能并不是什么大事,我想

然而,我真正想要的是从另一个客户端发出的请求触发网页更新(本地显示)

这张图片将更好地解释:

  • 开始时,浏览器连接到(本地)服务器(绿色箭头)
    我猜线程是在存储所有会话数据(实例变量)的地方执行的。
    为了使用一些“实时”机制,连接保持打开状态,因此线程Y不会终止。(我想这就是它的工作原理)
  • 第二个用户正在将(蓝色箭头)连接到服务器(可能是或不是同一网页),并执行一些操作(例如发布表单)。
    在这里,对外部客户机的响应并不重要。只需HTTP OK响应即可。但也可以返回确认网页。
    但是无论如何,线程X(和/或连接)没有特别的理由保留
  • 好的,这是我的问题(顺便说一句,感谢您阅读我的文章)。
    如何在本地web浏览器上回显此新数据

    我看到了两种不同的方法:

    • 路径A:在终止之前,线程X将数据(其实例变量)传递给连接仍然打开的线程Y。因此,服务器能够更新web浏览器
    • 路径B:在终止之前,线程X使用特定套接字直接向web浏览器发送请求(我指的是响应,因为它是服务器)
    我应该在两种方法中使用哪些机制来实现此功能?
    对于方法A,如何在线程之间交换数据?
    对于方法B,如何使用已打开的套接字

    但这两种方法(或另一种)中哪一种实际上是最好的方法呢

    再次感谢您阅读我的文章,并对我的英语不好表示歉意。

    我希望我已经清楚地表达了我的需要。

    你想得太多了。没有必要考虑线程和套接字等低级机制。大多数(全部?)酒吧订阅实时更新工具(ActionCable、faye等)以“频道”和“事件”的形式运行

    因此,您的流程将如下所示:

  • 客户端A(web浏览器)向服务器发出请求,并订阅“客户端A事件”(或其他)频道的事件

  • 客户端B(另一个浏览器)向您的服务器发出请求,并指示将事件发布到“客户端a事件”频道

  • 酒吧子图书馆发挥了它的魔力

  • 客户端A获得更新并相应地更新UI


  • 查看本介绍指南:。

    你想得太多了。没有必要考虑线程和套接字等低级机制。大多数(全部?)酒吧订阅实时更新工具(ActionCable、faye等)以“频道”和“事件”的形式运行

    因此,您的流程将如下所示:

  • 客户端A(web浏览器)向服务器发出请求,并订阅“客户端A事件”(或其他)频道的事件

  • 客户端B(另一个浏览器)向您的服务器发出请求,并指示将事件发布到“客户端a事件”频道

  • 酒吧子图书馆发挥了它的魔力

  • 客户端A获得更新并相应地更新UI


  • 查看此介绍指南:.

    同时,我发现rails中使用了一些gem或框架(
    faye
    pluzi
    EventMachine
    puhser
    )。。。但我必须明确指出,我想要的不是真正的实时内容(聊天或类似的东西)。。。我感兴趣的只是能够根据另一个客户端的请求从本地服务器向本地web浏览器发送数据。因此,我不需要任何沉重的第三方宝石。。由于我将使用Rails5,所以使用Rails5的ActionCable新特性也很好。同时,我再次找到了关于其中一些机制的精彩解释。现在我正在研究如何使用rails或django复制这些机制(不过只是为了学习目的…),同时我发现rails中使用了一些gem或框架(
    faye
    pluzi
    EventMachine
    puhser
    )。。。但我必须明确指出,我想要的不是真正的实时内容(聊天或类似的东西)。。。我感兴趣的只是能够根据另一个客户端的请求从本地服务器向本地web浏览器发送数据。因此,我不需要任何沉重的第三方宝石。。由于我将使用Rails5,所以使用Rails5的ActionCable新特性也很好。同时,我再次找到了关于其中一些机制的精彩解释。现在我正在研究如何使用rails或django复制这些机制(只是为了学习目的…),事实上我知道一些pub-sub(等)工具和框架在幕后执行所有这些需求。。。但是,通过集成这些机制(或框架),我觉得我将压倒我的体系结构。。涅弗瑟尔