首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将em-websocket添加到我的应用程序中

将em-websocket添加到我的应用程序中
EN

Stack Overflow用户
提问于 2017-03-09 13:59:55
回答 1查看 474关注 0票数 0

我有一个Ruby应用程序和Puma一起运行。现在,我想添加一个websocket来向连接的客户端广播REST请求。我只在我的config.ru中添加了一些代码,就成功地用em-websocket创建了一个websocket服务器:

代码语言:javascript
复制
    require_relative 'config/environment'

require 'em-websocket'

Socket = EM.run {

  @channel = EM::Channel.new

  EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 2929, :debug => true) do |ws|

    ws.onopen {
      sid = @channel.subscribe { |msg| ws.send msg }
      @channel.push "#{sid} connected!"

      ws.onmessage { |msg|
        @channel.push "blubb"
      }

      ws.onclose {
        @channel.unsubscribe(sid)
      }
    }

  end
}

run Rails.application

现在的问题是,当我运行'rails服务器-b 0.0.0.0‘时,websocket正在运行,而我的应用程序却没有运行。当连接到localhost:3000时,我会超时。我能做些什么才能让他们在一起?

后续问题:如何通过websocket向连接的客户端广播?我考虑在REST请求的控制器中添加一个广播方法。这有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 20:47:21

要让Rails HTTP和Websocket服务共享相同的端口,我知道有两个选项:

  1. 您可以设置一个使用该端口(可能是nginx)的代理,并将每个请求转发到它各自的应用服务器(即Puma和EM)。
  2. 您可以使用Websocket+HTTP服务器并在您的HTTP (Rails)应用程序中作为中间件运行Websockets服务(即使用ActionCable、Faye或iodine+plezi)。

我假设第二种解决方案更合适,尽管它需要您将代码从em-websockets移植到其他解决方案(即Faye或碘/Plezi)。

我应该注意到,基准测试显示了可能在压力下崩溃,过度消耗CPU。

我是碘的作者,所以我有偏见,我相信这是一个比大多数Ruby替代方案更好的解决方案(一些基准同意)。碘利用建议的(而且可能被放弃的) Rack-Websocket规范,因此HTTP和Websocket连接共享相同的服务器和IO反应堆,从而实现更好的资源管理。

但是,您也可以使用Faye,Faye(类似于当前的ActionCable实现)从HTTP服务器劫持套接字,并在建立Websocket连接后将其附加到单独的IO反应器上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42697330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档