您好我正在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 如何纠正这种行为?
答案 0 :(得分:0)
每次收到数据块时都会触发服务器事件data
。可能它会为客户的每一个角色开火。
解决方案是在服务器的connection
回调中创建缓冲区字符串/数组。 data
回调将接收的数据添加到该缓冲区。当数据包含换行符时,缓冲区将被广播并清空。