0

您好,我正在 node.js 上运行聊天服务器的基本代码。这几乎是从书中摘录的 - Node:Up and Running。问题是当客户端键入消息时,他的消息在每次击键时传输,而不是在完整的行并按 Enter 后,导致输出如下 - client1: (Sends) Hello 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 示例

4

1 回答 1

0

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

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

于 2013-05-10T14:26:22.330 回答