2012-04-20 142 views
1

我是一個真正的新手,但我無法弄清楚這個問題出了什麼問題。ruby​​:websocket服務器和websocket客戶端無法工作

我剛剛從網上的某個地方複製了一個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}" 
    } 
} 

客戶端始終旋出 「糟糕」。這意味着發生了錯誤。

有人能給我任何線索嗎?我很感激。

+0

既然你問了一個線索,把它添加到你的服務器'ws.onerror {| error | p錯誤},發出客戶端請求並讀取服務器放出的任何內容。 – forforf 2012-04-20 22:56:47

回答

2

其實,深入挖掘你的代碼是好的,這個問題是在最新版本的依賴關係中改變的。 步驟來解決:

卸載當前寶石

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,它應該適合你,但是它可能不會。

+0

感謝您的回覆。這非常有用。現在它工作。 – user1346968 2012-04-23 14:23:40

+0

em-http-request有一些依賴性問題。 – user1346968 2012-04-23 14:24:57

相關問題