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

7
我很渴望将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?

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

1个回答

6

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

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

如果要向除发出事件的客户端之外的每个客户端发送事件,则可以使用 socket.broadcast.emit("message-to-all-other-clients");


哦!我终于明白了!谢谢你。这正是我在脑海中困惑的地方,我一直认为套接字对象是客户端可以连接的“全局通道”。但现在有了新的理解,每次连接时都会创建一个“新通道”。 - Codious-JR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接