ale*_*no1 2 html5 websocket node.js socket.io
我目前正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
和快速的客户端界面
<!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>
Run Code Online (Sandbox Code Playgroud)
当我打电话给webSocket.send('some data')我时收到此错误Error: InvalidStateError: DOM Exception 11.在聊天服务器代码中,我有一个循环记录了当前客户端的数量,因此我知道浏览器已连接.
不知道从哪里开始,任何帮助将不胜感激.
亚历克斯
当你这样做时webSocket.send('some data'),必须建立套接字连接,或者特别是socket.readyState == 1.
您可以在此处查看websocket事件.为了确保永远不会发生这种情况,您应该在连接打开后使用Socket.onopen事件处理程序发送.你可以这样做.
if(webSocket.readyState == 1){
webSocket.send('some data');
}
else{
webSocket.onopen = function(e){
webSocket.send('some data');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5579 次 |
| 最近记录: |