客户端立即断开连接(Chrome扩展Websocket客户端+NodeJS服务器)



我正在尝试使用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让您的生活更轻松。

最新更新