设置websockets服务器

时间:2013-05-27 01:12:13

标签: javascript ruby-on-rails websocket em-websocket

这是我第一次使用websockets而我无法让我的服务器工作。以下是我从this github page复制的简单em-websocket服务器。它现在基本没变,所以它看起来像这样:

require 'em-websocket'

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

    # Access properties on the EM::WebSocket::Handshake object, e.g.
    # path, query_string, origin, headers

    # Publish message to the client
    ws.send "Hello Client, you connected to #{handshake.path}"
  }

  ws.onclose { puts "Connection closed" }

  ws.onmessage { |msg|
    puts "Recieved message: #{msg}"
    ws.send("Pong: #{msg}")
  }
end
}

然后我从this simple echo test复制了html,只是将网址从ws://echo.websocket.org更改为ws://localhost:3000/websocket.rb(.rb文件位于app目录中我的Rails项目)。

当我从该页面运行测试时,我得到以下结果:

CONNECTED

SENT: WebSocket rocks

RESPONSE: [["client_connected",{"id":null,"channel":null,"data":{"connection_id":70297110490160},"success":null,"result":null,"server_token":null}]]

DISCONNECTED

由于此测试中的数据是硬编码的,因此我预计SENTRESPONSE消息是相同的。但是,我收到以client_connected开头但只包含null数据的令人困惑的消息。

谁能告诉我发生了什么事?我是否连接到我的“服务器”(websockets.rb文件),如果是这样,我只需要在代码中进行一些调整,例如创建reply方法?再次,这是我第一次尝试使用这项技术,所以如果我在这篇文章中遗漏任何内容,我会道歉。

为了更好地衡量,以下是echo测试中运行的代码。

<script language="javascript" type="text/javascript">  
var wsUri = "ws://localhost:3000/websocket.rb"; 
var output;  
function init() { 
    output = document.getElementById("output"); 
    testWebSocket(); 
}  
function testWebSocket() { 
    websocket = new WebSocket(wsUri); 
    websocket.onopen = function(evt) { 
        onOpen(evt) 
}; 
websocket.onclose = function(evt) { 
    onClose(evt) 
}; 
websocket.onmessage = function(evt) { 
    onMessage(evt) 
}; 
websocket.onerror = function(evt) { 
    onError(evt) }; 
}  
function onOpen(evt) { 
    writeToScreen("CONNECTED"); 
    doSend("WebSocket rocks"); 
}  
function onClose(evt) { 
    writeToScreen("DISCONNECTED"); 
}  
function onMessage(evt) { 
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>'); 
    websocket.close(); 
}  
function onError(evt) { 
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); 
}  
function doSend(message) { 
    writeToScreen("SENT: " + message);  websocket.send(message); 
}  
function writeToScreen(message) { 
    var pre = document.createElement("p"); 
    pre.style.wordWrap = "break-word"; 
    pre.innerHTML = message; output.appendChild(pre); 
}  
window.addEventListener("load", init, false);  
</script>
<h2>WebSocket Test</h2>  
<div id="output"></div>  
</html>

0 个答案:

没有答案