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

时间:2012-03-02 15:46:30

标签: node.js google-chrome-extension websocket

我正在尝试将websocket从chrome 17扩展连接到本地nodejs服务器。创作后

var websocket = new WebSocket(“ws:// localhost:7055”);

在成功创建websocket实例后,我立即收到onClose事件。

检查websocket是否支持是真的。

if(窗口中的“WebSocket”)      log(“这里支持Websockets”);

这里的问题是什么?我希望有人可以帮我解决这个问题。

浏览器通常能够运行websockets,我已经测试过了 与

http://websocket.org/echo.html

“Dark WebSocket Terminal”(Google Extension)也显示了相同的内容 连接到ws:// localhost:7055 /

的行为

我也尝试了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 World\r\n');
}).listen(7055, 'localhost');

console.log('Server running at http://localhost:7055/');

3 个答案:

答案 0 :(得分:1)

您需要一个websocket服务器 - 您在服务器中拥有的只是一个常规的HTTP服务器。最受欢迎的是Socket.IO,在这种情况下,您还需要他们的客户端(他们处理不受支持的浏览器的后备,并支持几个websocket版本)。 SockJS是另一个受欢迎的方案。 WS是另一个。或npm search websocket

答案 1 :(得分:0)

您需要在nodejs端使用websocket服务器,例如Socket.IOws。现在,您只是使用不会协商websockets的nodejs HTTP。

一旦你运行了socket.io或ws,请确保在进行故障排除时充分利用原因和代码。 E.g。

function onClose(evt) {
   log('onclose=>' + ' ' + evt.reason + ', ' + evt.code);   
}

答案 2 :(得分:-3)

您应该使用expressSocket.io来让您的生活更轻松。