我是Ruby的新手。
我正在尝试使用WebSocket连接。所以我使用em-websocket gem。 我也使用Thin Web服务器。我做了一些像例子告诉我的事情。所以请帮帮我。
但服务器不断回复我:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
X-UA-Compatible: IE=Edge
ETag: "7592ed842deb971babc6640ff75207fb"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: f2d12b00aa2eb202b24c309ce0570da0
X-Runtime: 0.008190
Connection: close
Server: thin 1.5.0 codename Knife
客户请求:
GET /home/webSocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:3000
Origin: http://localhost:3000
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: i6Efmjpxmz2GOFpjduxoyA==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
客户端代码:
$(document).ready(
function() {
ws = new WebSocket("ws://localhost:3000/home/webSocket");
ws.onopen = function() {
alert('open');
ws.send("hello server");
};
ws.onmessage = function(evt) { alert(evt.data); };
ws.onclose = function() { alert('close'); };
});
这是服务器端代码:
def webSocket
require "rubygems"
require "em-websocket"
EventMachine.run {
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8000) do |ws|
ws.onopen { |handshake|
puts "WebSocket opened #{{
:path => handshake.path,
:query => handshake.query,
:origin => handshake.origin,
}}"
ws.send "Hello Client!"
}
ws.onmessage { |msg|
ws.send "Pong: #{msg}"
}
ws.onclose {
puts "WebSocket closed"
}
ws.onerror { |e|
puts "Error: #{e.message}"
}
end
}
end
答案 0 :(得分:0)
EventMachine正在侦听端口8000:
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8000)
但您正在尝试连接到端口3000:ws = new WebSocket("ws://localhost:3000/home/webSocket");
将其更改为连接到端口8000:
ws = new WebSocket("ws://localhost:8000/home/webSocket");
虽然除非您特别想将/home/webSocket
传递给EventMachine,否则不需要额外的路径。