如何使用eventmachine,rails和websockets?

时间:2013-04-18 22:06:35

标签: ruby-on-rails ruby eventmachine

我有以下sinatra代码,我如何做同等的但是对于rails应用程序?特别是,想在反应器循环内部启动带有薄的轨道,同时也在那里使用websocket服务器。

require 'bundler'
Bundler.require

class App < Sinatra::Base
  get '/' do
    slim :index
  end
end

EM.run do
  EM::WebSocket.start(:host => '0.0.0.0', :port => 3001) do |ws|
    # websocket stuff goes here
  end

  # start sinatra in a thin server instance here (but i want to start a rails app instead)
  Thin::Server.start App, '0.0.0.0', 3000
end

1 个答案:

答案 0 :(得分:1)

我设置了一个初始化程序,如config / initializers / websocket.rb:

EM.next_tick do
  EM::WebSocket.start(:host => '0.0.0.0', :port => 3001) do |ws|
    # websocket stuff goes here
  end
end

此外,将gem 'thin'添加到Gemfile并使用$ rails s启动服务器。当EM反应器启动时,将调用排队的next_tick块并且websocket服务器开始运行。

您也可以将websocket代码放在lib /中的某个文件中,然后通过初始化程序启动它,可能更干净。