如何使Socket只发送给发出请求的客户端?

时间:2019-04-09 04:21:26

标签: 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函数中看到的那样,为了测试它,我同时使用了通用的mit和发射到的to。我已经设置了适当的侦听器,但是套接字本身只是在建立新连接后才刷新。也许只有在套接字a建立新连接时才调用它?

我想立即将此功能称为apon套接字连接。仅适用于已连接的用户。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为您可以处理此问题的方法是不广播它。 尝试仅向当时连接的插座发出信号。 我没有得到您想要达到的目标,因此,如果下面的代码不能解决您的问题,请说出您希望得到什么输出。

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`)
});

当您使用套接字对象时,您只能访问该客户端...建立连接的客户端。