node.js中的chatserver基本错误

时间:2013-05-10 13:43:55

标签: node.js chat

您好我正在node.js上运行聊天服务器的基本代码。这几乎从书中得出 - 节点:启动和运行。问题是当客户端键入消息时,他的消息是在每次击键时发送的,而不是在完成一行并按下回车后发送,导致输出如下 - client1:(发送)您好 Client2 :( Recieves)127.0.0.1:50672>h 127.0.0.1:50672>e 127.0.0.1:50672>l 127.0.0.1:50672>l 127.0.0.1:50672>o

但这应该是它应该来的 Client2:(Recieves) 127.0.0.1:50672>hello

这里发生的是每次按键时传输的消息,而不是按下回车后。我从某人那里取出了git的另一个示例代码,同样的事情发生了!这是我的代码:

var net = require ('net');
var chatServer = net.createServer(),
     clientlist =[];
chatServer.on('connection',function(client){
client.name = client.remoteAddress+':'+client.remotePort;
client.write('Welcome '+ client.name + '!\n');
clientlist.push(client);
client.on('data',function(data){
broadcast(data,client);
});
});
function broadcast(message, client){
 for(var i=0;i<clientlist.length;i+=1){
    if(client !== clientlist[i]){
        clientlist[i].write(client.name + ":"+ message);
    }
    }
    }
console.log("Chatserver Started")
chatServer.listen(9000);

这是github示例,它产生了相同的结果: GITHUB 如何纠正这种行为?

1 个答案:

答案 0 :(得分:0)

每次收到数据块时都会触发服务器事件data。可能它会为客户的每一个角色开火。

解决方案是在服务器的connection回调中创建缓冲区字符串/数组。 data回调将接收的数据添加到该缓冲区。当数据包含换行符时,缓冲区将被广播并清空。