使用 Node 调用 .send(data) 时在 HTML5 websocket 上接收"Error: InvalidStateError: DOM Exception 11".js



我目前正在尝试使用node.js开发一个小型聊天应用程序。这是我的第一个节点项目,但我得到一个错误,我不确定如何解决它。

我已经写了一个简单的聊天服务器节点如下。

var port = 3000;
var net = require('net');
var clients = [];
var server = net.createServer(function (socket) {
  clients.push(socket);
  bindEventHandlers(socket);
});
setInterval(function(){
  console.log(clients.length);
}, 2000);
server.listen(port);
console.log('Server is listening on localhost:' + port);
function bindEventHandlers(socket) {
  socket.on('data', function(data){
    broadcastDataToAllClient(data, socket);
  });
  socket.on('close', function(){
    clients.splice(clients.indexOf(socket), 1);
  });
  socket.on('error', function(){
    console.log('Known Error << "It's a feature!"');
  })
}
function broadcastDataToAllClient(data, socket) {
  for (var client in clients) {
      if(clients[client] == socket){ continue; }
      clients[client].write(data);
  }
}

和快速客户端界面

<!DOCTYPE HTML>
<html>
    <head>
        <title>Node.js Chat Server</title>
        <script type="text/javascript">
            function init(){
                if (window.WebSocket) {
                    var input = document.getElementById('messageBox');
                    var webSocket = new WebSocket("ws://localhost:3000/");
                    input.onkeyup = function(e){
                        if(e.keyCode == 13) {
                            console.log('sending message');
                            webSocket.send('some data');
                        }
                    };
                    webSocket.onopen = function(e){
                        alert('Open');
                    }
                    webSocket.onmessage = function(e){
                        console.log('Message');
                    }
                    webSocket.onclose = function(e){
                        console.log('Close');
                    }
                    webSocket.onerror = function(e){
                        console.log('Error');
                    }   
                } else {
                    console.log('unable to support :(');
                }
            }
        </script>
    </head>
    <body lang="en" onload="init();">
        <h1>Node.js Chat Server</h1>
        <h3>Welcome to this simple chat server!</h3>
        <input id="messageBox" size="50" />
    </body>
</html>

当我调用webSocket.send('some data')时,我收到这个错误Error: InvalidStateError: DOM Exception 11。在聊天服务器代码中,我有一个循环记录当前客户端的数量,因此我知道浏览器已连接。

不知道从这里去哪里,任何帮助将非常感激。

亚历克斯

当您执行webSocket.send('some data')时,必须建立套接字连接,或者确切地说是套接字。readyState == 1.

你可以在这里查看websocket事件。为了确保这种情况永远不会发生,您应该在连接打开后发送,使用Socket.onopen事件处理程序。你可以这样做。

if(webSocket.readyState == 1){
    webSocket.send('some data');
  }
else{
    webSocket.onopen = function(e){
        webSocket.send('some data');
    }
}

相关内容

  • 没有找到相关文章

最新更新