我有一个使用 Puma 运行的 Ruby 应用程序。现在我想添加一个 websocket 来向连接的客户端广播 REST 请求。我设法通过在我的 config.ru 中添加一些代码来创建一个带有 em-websocket gem 的 websocket 服务器:
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 server -b 0.0.0.0”时,websocket 正在运行,但我的应用程序没有。连接到 localhost:3000 时,我会超时。我该怎么做才能一起运行它们?
后续问题:如何通过 websocket 向连接的客户端广播?我想过向 REST 请求的控制器添加广播方法。那可能吗?