javascript - 如何让 Socket 只发送给发出请求的客户端?

标签 javascript reactjs sockets socket.io

我在使用 socket.io 时遇到问题。我设置了一个功能,在连接时,用户数据会刷新,只是它似乎只在初始连接后发生。

当一个用户连接时,新用户上不会刷新任何内容。其他新用户连接,旧连接刷新,但新连接保持不变。

连接期间我无法发送数据吗?

这对我来说只是一些简单的练习,试图更好地使用 websockets,并且似乎无法超越一般的broadcast.emit。

当然,我尝试过socket.to(socket.id).broadcast.emit,但是也没有运气。您将在我的代码中看到。


// Setup socket.io
socketIo.on('connection', socket => {


        getDataByUser(user, socket)



    socket.on('disconnect', function() {
      delete CLIENTS[socket.id];
      console.log(`${username} disconnected`)
    });




function getDataByUser(user, socket) {



    var items = [1,2,3];
    items.forEach(element => {      
    socket.broadcast.emit('server:data', element)
      socket.broadcast.to(socket.id).emit('data', 'for your eyes only');
    });
}

正如您在 getData 函数中看到的,我使用了常规发出和发出到来测试它。我设置了正确的监听器,但是套接字本身仅在新连接时刷新。也许只有当套接字 a 建立新连接时才会调用?

我想在套接字连接上立即调用此函数。仅适用于已连接的用户。任何帮助将不胜感激。

最佳答案

我认为解决这个问题的方法是不广播它。 尝试仅向当时连接的套接字发送。 我没有得到您想要实现的目标,因此如果下面的代码不能解决您的问题,请说出您期望的输出。

socketIo.on('connection', socket => {


     var items = [1,2,3];
    items.forEach(element => {      
    socket.emit('server:data', element)
    socket.emit('data', 'for your eyes only');
    });



socket.on('disconnect', function() {
  socket.disconnect();
  console.log(`${username} disconnected`)
});

当您使用套接字对象时,您仅寻址到该客户端...建立连接的那个客户端。

关于javascript - 如何让 Socket 只发送给发出请求的客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585074/

相关文章:

java - 你如何从 Java 中的 InputStream 读取并转换为字节数组?

并发发送数据包

c - 使用非阻塞套接字时,recv 无响应

javascript - ReactJS 作为没有 NodeJS 服务器的小型分布式应用程序

javascript - HTML - 表格、添加行、编辑行

javascript - 在 HTA 中单击时使按钮变色?

javascript - 有 ID 的 mapStateToProps?

javascript - React - 设置状态

javascript - 'setTimeout' 在定义之前就被使用了

ReactJS 无法导入组件