2017-05-30 65 views
0

Im试图建立一个小型聊天应用程序,我可以发送私人消息(不广播给所有人)。到选定的socketid。我浏览了SockeIO的文档,可以找到可行的解决方案。该应用程序运行良好,因为我使用广播事件测试了它,所有连接的套接字都收到了发出的消息。如何实现个人消息传递?发送到个人socketid(私人消息)不能在socketIO

这是我试过的代码。

socket.to(sockets[data.receiver]).emit('receive',data.message); 

在那里我有使用socket.to(中)发射( '嗨', '我刚认识你')。在socketio文档和套接字[data.receiver]中给出的示例给出了要发送消息的人的socket.id。

+0

只需选择您想要发送数据的客户端的套接字,并使一个正常的socket.emit –

+0

更多的示例代码也可以帮助 –

+0

@SebastiánEspinosa这就是我已经尝试过,但它不工作,你是什么意思的正常socket.emit?我没有找到任何其他方法,将数据发送到选定的套接字。 –

回答

0

考虑类似如下:

class Connection { 
     constructor(name, socket) { 
       this.name = name; 
       this.socket = socket; 
     } 
} 

let connections = []; 

socket.on('connection', (socket) => { 
     // Get a name for the user/connection 
     // ... 
     // let name = getUsername(socket); 

     connections.push(new Connection(name, socket)); 
}); 

let sendToName = (name, message) => { 
     for(let i = 0, len = connections.length; i < len; i++) { 
       if(connections[i].name === name) { 
         connections[i].socket.emit('message', message); 
         break; 
       } 
     } 
}; 

当然,你可以使用比其他名称的东西...但你的想法。

+0

我试过类似的东西我保存了与用户名的socket.id并使用它发射给用户,但是**套接字.to(socket.id).emit('chat','message'); **函数不起作用。我试过你的代码,它不工作 –

+0

你不需要socket.to当你处理该用户/连接的具体套接字...只有socket.emit('聊天',消息)。我发布的代码并不是一个完整的例子,只是一些样板,给出了一个更好的方向的想法。 – mernstacking