【问题标题】:Socket.io, message to yourselfSocket.io,给自己的消息
【发布时间】:2016-03-21 13:00:38
【问题描述】:

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

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

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

我想这样解决,但是不行

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

为什么?

【问题讨论】:

  • 我不太了解您在这里要完成的工作。 socket.id 是当前用户的套接字 id(不是 waaayyy)。你能详细说明一下这个问题吗?
  • @SterlingArcher 我所有的用户都由 socket.id 标识,但消息只发给收件人,而不是发件人。
  • 我不明白...你想发生什么?请添加一些您希望发生的输入和输出示例。
  • @Mathias socket.id = sender id 点击 USER 消息后直接转发给他,就像在 Facebook 上一样。问题是消息到达收件人但未显示在窗口发件人中。因此想将消息传递给 socket.id ,它是发送者的标识符。 Socket.io 不向 socket.id 传输消息
  • @Emerceen 您可以考虑为用户腾出一个房间,并使用“io.sockets.in(room).emit”,它将发送给房间内的所有人,包括发件人

标签: javascript socket.io


【解决方案1】:

如果没有更多代码,很难说出你想要什么,但有一点是肯定的,为了向单个用户发送消息,你必须使用 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];

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2012-07-24
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多