Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置websockets服务器_Javascript_Ruby On Rails_Websocket_Em Websocket - Fatal编程技术网

Javascript 设置websockets服务器

Javascript 设置websockets服务器,javascript,ruby-on-rails,websocket,em-websocket,Javascript,Ruby On Rails,Websocket,Em Websocket,这是我第一次使用WebSocket,我的服务器无法正常工作。下面是我从中复制的简单的emwebsocket服务器。现在基本上没有变化,所以看起来是这样的: require 'em-websocket' EM.run { EM::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws| ws.onopen { |handshake| puts "WebSocket connection open"

这是我第一次使用WebSocket,我的服务器无法正常工作。下面是我从中复制的简单的
emwebsocket
服务器。现在基本上没有变化,所以看起来是这样的:

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
}
然后我从复制了
html
,只是将url从
ws://echo.websocket.org
更改为
ws://localhost:3000/websocket.rb
(该.rb文件位于我的Rails项目的
app
目录中)

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

CONNECTED

SENT: WebSocket rocks

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

DISCONNECTED
由于此测试中的数据是硬编码的,因此我希望
发送的
响应的
消息是相同的。但是,我得到了一条令人困惑的消息,它以
client\u 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>

var wsUri=“ws://localhost:3000/websocket.rb”;
var输出;
函数init(){
输出=document.getElementById(“输出”);
testWebSocket();
}  
函数testWebSocket(){
websocket=新的websocket(wsUri);
websocket.onopen=函数(evt){
onOpen(evt)
}; 
websocket.onclose=函数(evt){
onClose(evt)
}; 
websocket.onmessage=函数(evt){
onMessage(evt)
}; 
websocket.onerror=函数(evt){
onError(evt)};
}  
函数onOpen(evt){
写屏(“连接”);
doSend(“网岩”);
}  
函数onClose(evt){
写屏(“断开”);
}  
消息上的函数(evt){
writeToScreen('响应:'+evt.data+'');
websocket.close();
}  
函数onError(evt){
writeToScreen('错误:'+evt.data);
}  
函数doSend(消息){
writeToScreen(“已发送:”+消息);websocket.send(消息);
}  
函数写入屏幕(消息){
var pre=document.createElement(“p”);
pre.style.wordWrap=“断开单词”;
pre.innerHTML=消息;output.appendChild(pre);
}  
addEventListener(“加载”,init,false);
网袋试验