【问题标题】:attaching data to sockets将数据附加到套接字
【发布时间】:2016-01-28 18:24:53
【问题描述】:

我想让一些客户端使用 socket.io 连接到房间,然后将他们的信息存储到一个对象中(如用户列表)

如果他们离开频道,我希望自动删除该条目。

如何将一些“外部”信息连接到套接字?有可能吗?

示例:

名为“joe”的用户连接

socket.emit('joinRoom', {username: 'joe'});

在服务器上,我想做类似的事情

socket.on('joinRoom', function(msg) {
    userData.push(msg.username);    //  <-- how can i simplify/automatize this?
}

是否有内置的东西来管理用户?

(问题源于我想将护照用户信息挂接到套接字。joe 使用护照登录,服务器 req知道这一点。但套接字不知道,因为根本没有 req )

最后,我希望能够说“向以 joe 身份登录的用户发送套接字消息”。如果乔离开频道,将他从用户列表中删除等

这可能吗?你会怎么做?我的方法错了吗? 谢谢

【问题讨论】:

    标签: node.js sockets socket.io


    【解决方案1】:

    您可以向套接字对象添加属性:

    socket.on('joinRoom', function(msg) {
    socket.username=msg.username;   
    }
    

    如果你要修改的socket不是发射器,你可以通过

    io.sockets.connected[socket.id].username=msg.username
    

    但你需要他的身份证。

    【讨论】:

    • id 会随着每次新的页面加载而变化,对吧? (我之前尝试过使用套接字 id 的东西,但注意到它们每次都不同)。所以这仅适用于两者之间没有新的页面加载吗? (只是为了确保我理解正确)除此之外:套接字对象上的属性可以在双方都读/写吗?例如:在客户端写入名称,然后在服务器端检索它?谢谢:)
    • 是的,如果套接字失去连接,您将丢失附加到它的数据,并且服务器和客户端上的套接字对象是独立的,因此您必须手动完成
    • 不错不错。最后一件事:我如何解决那个特定的套接字?假设我有主持人连接on('joinMod', function(msg) {socket.userrole='mod'}) 现在我只想将与 mod 相关的内容发送到该套接字。我可以/必须遍历所有套接字吗?或者我可以说to(sockets[userrole == 'mod']) 之类的话吗?
    • 不,你不能这样做。您的选择是:遍历所有连接的套接字,遍历仅连接到此房间io.sockets.adapter.rooms[roomname].sockets 的所有套接字,或者如果每个房间只有一个 mod,也许您可​​以有一个哈希对象,其中键是房间名,值是socket.id 喜欢:var obj={}; obj[roomname]=socket.id 所以你可以做io.sockets.connected[ obj[roomname] ]
    • 谢谢!现在我有另一个问题。我在这里提出了另一个问题stackoverflow.com/questions/35088999/… 如果你能再次提供帮助我会很高兴:)
    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2017-12-15
    • 2019-09-16
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多