ruby:websocket服务器和websocket客户端可以';行不通

ruby:websocket服务器和websocket客户端可以';行不通,ruby,websocket,Ruby,Websocket,我真的是个新手。但是,我不知道这个问题出了什么问题 我刚刚从网上的某个地方复制了一个RubyWebSocket服务器和一个RubyWebSocket客户端实现。我还在我的windows xp上安装了ruby 1.93。所有这些看起来都很好,但是websocket客户端并不是很好地工作 服务器端代码: equire 'em-websocket' EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |w

我真的是个新手。但是,我不知道这个问题出了什么问题

我刚刚从网上的某个地方复制了一个RubyWebSocket服务器和一个RubyWebSocket客户端实现。我还在我的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}"
  }
}
客户端代码:

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”。这意味着发生了一个错误


有人能给我一些线索吗?我很感激。

事实上,深入挖掘您的代码是可以的,问题是最新版本的依赖关系有所改变。 修复的步骤:

卸载当前的gems

 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是有效的,它应该对你有效,但也可能不行。

既然你要求提供线索,请将它添加到你的服务器
ws.onerror{error | p error}
,发出客户端请求并读取服务器发出的任何内容。em-http-request有一些依赖性问题。