2013-07-24 2 views
1

У меня есть следующий код для узла node.js chatserver. Сервер работает, и клиенты могут подключаться к telnet и подключаться. Но когда клиент отправляет сообщение, он автоматически отключает каждого другого клиента, и я не понимаю, что я сделал неправильно.Node.js chatServer, клиенты отключены, когда другой пользователь отправляет данные

var net = require('net'); 
var chatServer = net.createServer(); 
var clientList = []; 

chatServer.on('connection', function(client) { 
    client.name = client.remoteAddress + ':' + client.remotePort; 
    client.write("Hi " + client.name + "!\n"); 

    clientList.push(client); 

    client.on('data', function(data) { 
     broadcast(data, client); 
    }); 

    client.on('end', function() { 
     clientList.splice(clientList.indexOf(client), 1); 
    }); 

    client.on('error', function(e) { 
     console.log(e); 
    }); 
}); 

function broadcast(message, client) { 
    var cleanup = []; 
    for(var i = 0; i < clientList.length; i++) { 
     if(client !== clientList[i]) { 
      if(clientList[i].writeable) { 
       clientList[i].write(client.name + " says " + message); 
      } else { 
       cleanup.push(clientList[i]); 
       clientList[i].destroy(); 
      } 
     } 
    } 

    for(i = 0; i < cleanup.length; i++) { 
     clientList.splice(clientList.indexOf(cleanup[i]), 1); 
    } 

} 

chatServer.listen(9000); 

ответ

1

Вы опечатка здесь

если (clientList [я] .writeable)

правильное название этого свойства является записываемый

0

Я думаю, что условие writable терпит неудачу для каждого элемента массива, и, следовательно, все клиенты удаляются, в соответствии с вашим кодом. Не уверен, что вы пытаетесь сделать с проверкой writable.

+0

Check [чистый. Свойство Socket.writable не является частью официального node.js API] (http://stackoverflow.com/q/9529795) – Bergi

Смежные вопросы