我目前正在尝试使用 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/