1

別のプロセスとしてではなく、Railsサーバーを実行するときに実行されるEventMachineサーバーを取得しようとしています。

したがって、たとえば、ここの単純なサーバーの例(em-websocket)を使用すると、次の(スタンドアロン?)ルビーコードが得られます。

EventMachine.run {

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

      # publish message to the client
      ws.send "Hello Client"
    }

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

コマンド「railsnewem-example」を実行したとすると、上記のコードは私のrails 3アプリのどこに配置されますか

上記のコードは、理想的には別のスレッド(またはファイバー..?)で実行する必要があると思いますが、どのように見えるかはわかりません。

Webサーバーとして「thin」を使用すると、これは簡単なはずです。Herokuはデフォルトでこれを使用しているようで、ローカルでもテストできるように「薄い」gemをインストールしました。

4

1 に答える 1

1

おそらく、コードをイニシャライザーに入れたいと思うでしょう。John Nunemakerは、SinatraアプリのPassengerでEventMachineを起動することについて、いくつかの非常に興味深い情報を投稿しました。これは、あなたにとってもかなり同じように機能すると思います。

そうは言っても、WebソケットサーバーをHerokuで動作させようとしているように思えます。理論的には、Cedarスタックで実行し、EMベースのWebsocketサーバーのProcfileに新しいプロセスタイプを追加すると、Cedarスタックが機能すると思います。これは次のようになります。

web:         bundle exec rails server -p $PORT
websocket:   bundle exec script/websocket_server $PORT

script / websocket_serverは、カスタムポート引数を処理できるアプリのソケットサーバースクリプトです。

ただし、残念ながら、ここで概説するように、HerokuはまだWebsocketをサポートしていないため、Procfileソリューションは機能しない可能性があります。

于 2011-12-17T03:52:25.207 に答える