【问题标题】:JavaScript WebSocket connection readyState = 0. Connection to server can not be establishedJavaScript WebSocket 连接 readyState = 0。无法建立与服务器的连接
【发布时间】:2013-05-20 05:55:18
【问题描述】:

我有一些 Node.js 代码,我一直在运行 node.exe,如下所示:

// http://www.zhihua-lai.com/acm
// 09-Feb-2013

var sys = require('sys');
var net = require('net');
var sockets = [];

var svr = net.createServer(function(sock) {
    sys.puts('Connected: ' + sock.remoteAddress + ':' + sock.remotePort); 
    sock.write('Hello ' + sock.remoteAddress + ':' + sock.remotePort + '\n');
    sockets.push(sock);

    sock.on('data', function(data) {  // client writes message
        if (data == 'exit\n') {
            sys.puts('exit command received: ' + sock.remoteAddress + ':' + sock.remotePort + '\n');
            sock.destroy();
            var idx = sockets.indexOf(sock);
            if (idx != -1) {
                delete sockets[idx];
            }
            return;
        }
        var len = sockets.length;
        for (var i = 0; i < len; i ++) { // broad cast
            if (sockets[i] != sock) {
                if (sockets[i]) {
                    sockets[i].write(sock.remoteAddress + ':' + sock.remotePort + ':' + data);
                }
            }
        }
    });

    sock.on('end', function() { // client disconnects
        sys.puts('Disconnected: ' + data + data.remoteAddress + ':' + data.remotePort + '\n');
        var idx = sockets.indexOf(sock);
        if (idx != -1) {
            delete sockets[idx];
        }
    });
});

var svraddr = '127.0.0.1';
var svrport = 8080;

svr.listen(svrport, svraddr);
sys.puts('Server Created at ' + svraddr + ':' + svrport + '\n');

服务器运行后,我可以再打开两个终端客户端并使用 NetCat 或 telnet。当我在任一客户端窗口中键入信息时,信息会广播到两个 NetCat 窗口。我遇到的问题是当我尝试创建到服务器的 JavaScript 连接时。

<!DOCTYPE html>
<html>
<head>
<title>sample</title>
<script type="text/javascript">
var connection = new WebSocket('ws://localhost:8080');
console.log(connection);
// When the connection is open, send some data to the server
connection.onopen = function () {
    connection.send("a"); // Send the message 'Ping' to the server
    console.log("send data...");
};
</script>
<body>
</body>
</html>

连接的 readyState 为 0 表示 Google Chrome 的 JavaScript 无法打开与服务器的连接。我已确保 Windows 防火墙已关闭以避免任何连接问题,并且服务器与 NetCat 一起正常工作。我现在想进一步使用 Nodejs 并让 JavaScript 连接到服务器,但我还不确定这将如何发生或需要对代码进行哪些更改。

提前谢谢...

【问题讨论】:

    标签: node.js tcp websocket chat


    【解决方案1】:

    虽然 websocket 使用 tcp/ip,但 websocket 服务器不仅仅是标准的 tcp 服务器。

    RFC6455 定义了客户端和服务器必须使用的 websocket 协议。要打开连接,请参阅handshaking section。要稍后发送/接收消息,请参阅data framing section

    您需要实现自己的服务器来实现此协议,或者找到可以集成的现有第三方服务器。如果您想考虑现有服务器,ws 看起来很有希望。

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2021-10-20
      • 2020-04-06
      • 2021-01-02
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2021-07-18
      相关资源
      最近更新 更多