2013-05-10 83 views
0

你好,我正在node.js上运行chatserver的基本代码。这几乎从书中解脱出来 - Node:Up and Running。问题是当一个客户端键入一条消息时,他的消息是在每个按键时传输的,而不是在完成一行并按下回车后导致如下输出 - client1:(发送)您好 Client2:(接收)127.0。 0.1:50672>ħ127.0.0.1:50672>e 127.0.0.1:50672>l 127.0.0.1:50672>l 127.0.0.1:50672>onode.js中的chatserver基本错误

但是这是应该怎么来 客户机2:(临危) 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

包括您的客户端JavaScript。我怀疑你的问题是你每次按键后都要传回你的Node服务器,当你只想在用户点击输入(e.keyCode == 13) – 2013-05-10 13:49:27

+0

之后,客户端只是普通的旧windows命令提示符,首先我使用telnet localhost 9000进行连接,然后我输入!我从一个更多的命令提示符来添加一个客户端。 – 2013-05-10 14:13:35

回答

0

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

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

+0

hEY谢谢你解决了这个问题。不知道这本书的例子如何工作,没有这个。 – 2013-05-11 04:12:43

+0

也许这本书适用于unix shell而不是windows提示符。你能否接受(并投票?)答案? – Roemer 2013-05-11 07:28:52