我正在尝试使用websocket从chrome 17扩展连接到本地nodejs服务器。创建后
var websocket=新的websocket("ws://localhost:705");
成功创建websocket实例后,我立即收到onClose事件。
检查是否支持websocket是真的。
if(窗口中的"WebSocket")日志("此处支持Websockets");
这里有什么问题?我希望任何人都能在这个问题上帮助我。
浏览器通常能够运行websocket,我已经测试过了带有
http://websocket.org/echo.html
此外,"Dark WebSocket终端"(谷歌扩展)显示了相同的连接到ws://localhost:705/的行为
我也用ws://127.0.0.1:7055/尝试过,结果与相同
客户端代码(Chrome 17扩展)
runSockets("ws://localhost:7055");
function runSockets(wsUri) {
if ("WebSocket" in window)
log("Websockets are supported here ");
var websocket = new WebSocket(wsUri);
log("Web Socket created with the state "+ websocket.readyState);
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) {
log("CONNECTED");
doSend("WebSocket connected");
}
function onClose(evt) {
log("DISCONNECTED");
}
function onMessage(evt) {
log("RESPONSE: " + evt.data);
websocket.close();
}
function onError(evt) {
log("ERROR: " + evt.data);
}
function doSend(message {
log("SENT: " + message);
websocket.send(message);
}
服务器代码(nodejs v0.6.11)
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldrn');
}).listen(7055, 'localhost');
console.log('Server running at http://localhost:7055/');
您需要一个websocket服务器——您的服务器中只有一个常规的HTTP服务器。最受欢迎的是Socket.IO,在这种情况下,您还需要他们的客户端(他们为不受支持的浏览器处理故障,并支持几个websocket版本)。SockJS是另一个流行的软件包。WS是另一个。或npm search websocket
。
您需要在nodejs端使用一个websocket服务器,如Socket.IO或ws。现在,您只使用nodejs HTTP,它不会协商websocket。
一旦你运行了socket.io或ws,在进行故障排除时一定要充分利用原因和代码。例如
function onClose(evt) {
log('onclose=>' + ' ' + evt.reason + ', ' + evt.code);
}
您应该使用express和Socket.io让您的生活更轻松。