在套接字 io 连接中设置用户名

Posted

技术标签:

【中文标题】在套接字 io 连接中设置用户名【英文标题】:set username in socket io connection 【发布时间】:2017-04-07 14:26:07 【问题描述】:

我有一个聊天应用程序,我必须在其中处理在线用户。 我如何发送用户名:

    var myiosocket = io.connect();

所以我可以在后端列一个列表。

目前我正在这样做。

Socket.on("connect",function()
            Notification.primary('Connected');
            Socket.emit('iamonline',
                username: $rootScope.username
            );
        );

后端:

var onlineUsers = ;
io.sockets.on('connection', function(socket)
    socket.on('iamonline',function (data) 
        console.log(data.username," connected.")
        onlineUsers[data.username] = socket;
        Users[data.username] = socket;
        currentUser = data.username;
        console.log(socket)
        io.sockets.emit("liveusers",Object.keys(onlineUsers));
    );
    socket.on('disconnect', function()
        delete onlineUsers[currentUser];
        console.log(currentUser," disconnected.");
        io.sockets.emit("liveusers",Object.keys(onlineUsers));
    );
);

【问题讨论】:

【参考方案1】:

我在另一个项目中遇到了同样的问题,并找到了通过查询和握手获得价值的最佳方法。

server.js

io.on('connection' , function(socket)
  if(typeof socket.handshake.name!="undefined")
    user = 
      name : socket.handshake.query.name,
      id : socket.handshake.query.id,
      email : socket.handshake.query.email,
    
  
);

在客户端,

if(typeof io != "undefined")
  var visitor = io.connect('ws://127.0.0.1:8000' , 
        'query': $.param(token: '<?=Session::$instance->session['id']?>') + '&name=<?=Session::get("username")?>&id=<?=Session::get("ID")?>&email=<?=Sesion::get("Email")?>'
  );

【讨论】:

你拯救了我的一天,非常感谢。

以上是关于在套接字 io 连接中设置用户名的主要内容,如果未能解决你的问题,请参考以下文章

建立多个连接时如何在C中设置套接字超时?

在 python thrift 客户端中设置套接字的连接和读取超时

有没有办法在 iOS 和 Android 设备中设置 Web 套接字服务器(不是客户端)?

如何在 boost asio 中设置阻塞套接字的超时时间?

如何在 azure 中设置安全的 Web 套接字

如何在python中设置套接字选项IP_DONTFRAG?