发送到具有特定对象属性的套接字

时间:2014-11-05 19:20:16

标签: node.js sockets socket.io

我正在将username添加到套接字对象中,这样可以正常工作

socket.on('add user', function (username) {
    socket.username = username;
});

让我们假设usernamekhawer,现在我想发送到usernamekhawer的套接字,但我无法这样做。

我试过这个

io.sockets.connected[socket.username].emit('chat message', msg);

这个

io.sockets.sockets[socket.username].emit('chat message', msg);

但两者都没有用。我在这做错了什么?

1 个答案:

答案 0 :(得分:1)

username属性分配给套接字并不会使其按名称编制索引 - 因此您无法执行您正在执行的任何类型的查找。

如果要按用户名查找套接字,则必须对所有套接字进行强力搜索才能找到具有相同用户名的套接字,或者您必须按名称创建自己的套接字索引


如果你想进行强力查找以找到它,你可以这样做:

var list = io.sockets.sockets;
for (var i = 0; i < list.length; i++) {
    if (list[i].username === "khawer") {
        list[i].emit('chat message', msg);
    }
}

您还可以将每个用户放入一个名称与其用户名相匹配的聊天室。然后,您只需通过该名称发送到聊天室即可发送到任何给定的用户名。您将使用聊天室功能作为用户名的索引。它只需要一个额外的步骤就可以将一个套接字放入一个与用户名相连的聊天室。


或者,每次套接字连接和断开连接时,您都可以按用户名维护自己的套接字索引(这是相对常见的)。