【问题标题】:Client disconnects immediately (Chrome Extension Websocket Client + NodeJS Server)客户端立即断开连接(Chrome 扩展 Websocket 客户端 + NodeJS 服务器)
【发布时间】:2012-03-21 03:01:35
【问题描述】:

我正在尝试将 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 扩展)也显示相同 连接到 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/');

【问题讨论】:

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


    【解决方案1】:

    您需要一个 websocket 服务器——您的服务器中只有一个普通的 HTTP 服务器。最受欢迎的是Socket.IO,在这种情况下,您还需要他们的客户端(他们处理不受支持的浏览器的回退,并支持多个 websocket 版本)。 SockJS 是另一个流行的软件包。 WS 是另一个。或npm search websocket

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        一旦你让 socket.io 或 ws 运行,请务必在故障排除时利用原因和代码。例如

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-28
          • 1970-01-01
          • 2010-10-17
          相关资源
          最近更新 更多