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

标签 html node.js websocket socket.io

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

我在下面的 Node 中编写了一个简单的聊天服务器。

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') 时,必须建立套接字连接,或者特别是 socket.readyState == 1。

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

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

关于html - 使用 Node.js 调用 .send(data) 时在 HTML5 websocket 上接收 "Error: InvalidStateError: DOM Exception 11",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376029/

相关文章:

node.js - Protractor 在 Centos 上打开 Chrome 驱动程序超时

json - 在 Swift 中接收 Websocket 数据

javascript - Firebase 库订单

html - 查找将文本 FOO 替换为样式 "Heading 1"和 <h1>Foo</h1>

node.js - 仅当设置选项卡时,Docusign 请求才返回错误?

javascript - 通过 websockets 发送相位图像

laravel - 阻止用户查看其他用户正在查看的内容的最佳方法?

php - 如何将 php 发送邮件表单与图像点击列表结合起来?

javascript - 通过突出显示在所有 TD 中找到值(value)

javascript - 导入的函数未定义