rails服务器不会以em-websocket开头

时间:2012-12-20 17:13:46

标签: ruby-on-rails ruby-on-rails-3 em-websocket

我正在尝试使用em-websocket构建rails websocket应用程序。我已将下面的代码放在文件config / initalizers / websocket.rb中但是当我运行'rails server'时,应用程序无法启动。如果我删除代码,它开始正常。在我的本地机器和服务器上也会发生同样的事情。

require 'eventmachine'
require 'em-websocket'

EventMachine.run {

    EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
        ws.onopen {
          puts "WebSocket connection open"
          ws.send "Hello Client"
        }

        ws.onclose { puts "Connection closed" }
        ws.onmessage { |msg|
          puts "Recieved message: #{msg}"
          ws.send "Pong: #{msg}"
        }
    end

    puts "Websocket started"
}

我将此控制台打印出来

=> Booting WEBrick
=> Rails 3.2.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Websocket started

如果我删除上面的代码就可以了,我得到了:

=> Booting WEBrick
=> Rails 3.2.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-12-21 04:19:52] INFO  WEBrick 1.3.1
[2012-12-21 04:19:52] INFO  ruby 1.9.3 (2012-04-20) [i386-mingw32]
[2012-12-21 04:19:52] INFO  WEBrick::HTTPServer#start: pid=1484 port=3000

任何想法都将受到高度赞赏

2 个答案:

答案 0 :(得分:3)

之前我没有使用过这个gem,但看起来你在初始化程序中启动了一个服务器。

然后在主线程上暂停执行,直到您的Websockets服务器将控制权返回给它(这可能是您的websockets服务器关闭时)。

您可能希望服务器作为单独的应用程序,因此您有一个响应HTTP(您的Rails服务器)的服务器,以及响应套接字的服务器(初始化程序文件的开头)。

答案 1 :(得分:0)

第一个解决方案:

  • 将websocket.rb移至 / config (不在初始化程序内)
  • 运行' rails server'打开另一个控制台。
  • 转到 your_project_path / config / 并运行' ruby​​ websocket.rb'

第二个解决方案:

将代码放在Thread中,以避免主线程阻塞。

require 'eventmachine'
require 'em-websocket'

Thread.new { 

# Your websocket code

}