Javascript 设置websockets服务器
这是我第一次使用WebSocket,我的服务器无法正常工作。下面是我从中复制的简单的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"
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);
网袋试验