Socket.io,给自己留言

时间:2016-03-21 13:00:39

标签: javascript socket.io

Socket.io不会显示自己发送的消息。 例如

var id = 333;
socket.broadcast.to(id).emit('user', user);

它运行良好,但消息仅在客户端#333中,但是用户比发送消息,在消息客户端中没有副本。

我想以这种方式解决,但它不起作用

socket.broadcast.to(socket.id).emit('user', user);

为什么?

2 个答案:

答案 0 :(得分:0)

如果没有更多代码,很难说出你想要的东西,但有一件事是肯定的,为了向单个用户发送消息,你必须使用socket个对象并使用socket.emit

据我所知broadcast仅用于告诉除自己以外的所有人。

在跟踪用户时,我通常会做的事情是:

    var userList = [];
io.on('connection', function (socket) {

    socket.on('userData', function (userDetails) {
        userDetails.socket = socket;
        userList[userDetails.id] = userDetails
    });
});

基本上当用户连接到我的套接字并且用户的页面被完全加载时,它会发送其id(或者如果你愿意的话),然后我将用户的socket映射到列表中,这样我就可以快速选择如果我希望发送给该用户,请再次启动。

一个例子可能是:

user.id = 33连接到我们的服务器

加载后,用户会发送到我们的服务器userData功能

然后获取套接字并将其放入行33

的列表中

当我们需要时,我们可以使用以下代码来获取用户socket

socket = userList[33];

或者如果我们有对象:

socket = userList[user.id];

我希望这会对你有所帮助。

答案 1 :(得分:0)

为此,您可以使用socket.emit('message')

socket.emit:仅发射一个套接字。

希望这会对您有所帮助。您也可以查看以下链接:socket.io send packet to sender only