下面这段代码的for语句中,当我开启两个客户端时,一个客户端发送的消息用users[i].write输出对方就可一收到消息,为什么用conn.write输出对方就收不到消息,而且明明是个for循环,消息不应该是连续输出两次吗?
var net=require('net');
var count=0,users={};
var server=net.createServer(function(conn){
conn.setEncoding('utf-8');
var nickname;
conn.write(
'\n > welcome to node-chat!'
+'\n > '+ count + ' other people are connected at this time.'
+'\n > please write your name and press enter:'
);
count++;
conn.on('data',function(data){
data=data.replace('\r\n','');
if(!nickname){
if(users[data]){
conn.write('>nickname already in use,try again:');
return;
}else{
nickname=data;
users[nickname]=conn;
for(var i in users){
**users[i].write('>'+ nickname + ' joined the room\n');**
}
}
}
});
conn.on('close',function(){
count--;
});
});
server.listen(3000,function(){
console.log('server listening on *:3000');
});
在user对象中以用户的nickname为key,保持了其持有的连接
有N个用户,就会有N个userKey,同时对应N个tcp连接
消息广播必须通过用户对应的conn发送,客户端才能收到
这个conn是当前触发data事件的那个用户的TCP连接,conn.write就是给自己发送消息~~~~
遍历用户,并且取出对应的TCP连接,发送消息~~
另外:
代码可以优化下,nickName这个变量没有用的~~~