socket.io上的疑问。

io.on('connection', function(socket){
    console.log('a user connected');
    
    //监听新用户加入
    socket.on('login', function(obj){
        //将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
        socket.name = obj.userid; // 这一句很不明白。
        
        //检查在线列表,如果不在里面就加入
        if(!onlineUsers.hasOwnProperty(obj.userid)) {
            onlineUsers[obj.userid] = obj.username;
            //在线人数+1
            onlineCount++;
        }
        
        //向所有客户端广播用户加入
        io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
        console.log(obj.username+'加入了聊天室');
    });
});

第一个问题

上面的代码中:socket.name = obj.userid这一句很不理解,socket对象在服务器端不是共享的么,这么写的话岂不是后来的userId会把前面的覆盖掉么。
还是说socket是这样工作的,一个user连接变会复制一份上面的代码,独用,也就是说不是共享的。

第二个问题

io.emitsocket.emit有什么区别。我发现有的代码里这两种写法都有呢。

阅读 2.7k
1 个回答
  1. 这里的socket是一对一的。

  2. 前者是广播。后者是单播。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进