Socket.io:如何处理/pipe理多个客户端的请求和响应?

我非常渴望将Socket.io集成到我的node.js项目中,但是我对如何正确使用socket.io有一些疑惑。 我一直在浏览文档和教程,但我一直无法理解socket.io如何工作的一些概念。

我想到的情况如下:

  • 有多个客户端C1,C2,…,Cn
  • 客户端向服务器R1,…,Rn发送请求
  • 服务器接收请求,进行数据处理
  • 数据处理完成后,服务器向客户端Rs1,…,Rs2发出响应

我在这种情况下的困惑是,当服务器完成数据处理时,它会按照以下方式发出响应:

// server listens for request from client socket.on('request_from_client', function(data){ // user data and request_type is stored in the data variable var user = data.user.id var action = data.action // server does data processing do_some_action(..., function(rData){ // when the processing is completed, the response data is emitted as a response_event // The problem is here, how to make sure that the response data goes to the right client socket.emit('response_to_client', rData) }) }) 

但是在这里我没有定义我正在发送响应的客户端!

  • socket.io如何处理这个问题?
  • socket.io如何确保:响应Rs1被发送到C1?
  • 什么是确保:响应Rs1不发送到C2?

我希望我已经很好地解释了我的疑惑。

socket对象的实例对应于客户端连接。 因此,从该实例发出的每个消息都会发送到打开该套接字连接的客户端。 请记住,在connection事件时,您将获得(通过onDonecallback)套接字连接对象。 每次客户端连接到socket.io服务器时都会触发此事件。

如果你想发送消息给所有你可以使用的客户端
io.sockets.emit("message-to-all-clients")

如果你想发送一个事件给每个客户端,除了发送事件socket.broadcast.emit("message-to-all-other-clients");