1

私はこれについて本当に初心者ですが、この問題の何が問題なのかわかりません。

Ruby WebsocketサーバーとRuby Websocketクライアントの実装について、オンラインのどこかからコピーしました。また、Windows XPにruby 1.93をインストールしました。すべて問題ないように見えましたが、websocket クライアントは実際にはうまく機能しません。

サーバー側コード:

equire 'em-websocket'

EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
  ws.onopen    { ws.send "Hello Client!"}
  ws.onmessage { |msg| ws.send "Pong: #{msg}" }
  ws.onclose   { puts "WebSocket closed" }
end

クライアント側のコード:

require 'eventmachine'
require 'em-http-request'

EventMachine.run {
  http = EventMachine::HttpRequest.new("ws://localhost:8080").get :timeout => 0
  http.errback { puts "oops" }
  http.callback {
      puts "WebSocket connected!"
      http.send("Hello client")
  }

  http.stream { |msg|
      puts "Recieved: #{msg}"
      http.send "Pong: #{msg}"
  }
}

クライアント側は常に "oops" をスピンアウトします。エラーが発生したことを意味します。

誰も私にこれの手がかりを教えてもらえますか? 感謝します。

4

1 に答える 1

2

実際、コードをもう少し深く掘り下げることは問題ありません。問題は、最新バージョンの依存関係で何かが変更されたことです。修正手順:

現在のgemをアンインストールします

 gem uninstall em-http-request --version="1.0.2"  
 gem uninstall em-socksify --version "=0.2.0"     1.0.0.beta.4
 gem uninstall eventmachine --version "=1.0.0.beta.4"

次に、これらの宝石をインストールします

 gem install em-http-request --version "=0.3"
 gem install em-socksify --version "=0.1"
 gem install eventmachine --version "0.12.10"

そして、物事はうまくいくはずです。これが、学習するのではなく、ある種の深刻なプロジェクトの場合は、WebSocketクライアントサーバーを壊している変更を調査する必要があります。

注:これはUbuntu上のRuby 1.9.2で機能しましたが、機能するはずですが、そうでない場合もあります。

于 2012-04-20T23:23:45.047 に答える