4

假设我有一个正在侦听 generic 的套接字服务器message,并且仅由于不同的有效负载而改变其行为。例如:

socket.on('users.get', function(payload) {
    // retrieve user data
    // return data that corresponds to the data requested in "payload"

    socket.emit('users.get', returnData);
});

emit如果使用消息制作了两个 socket users.get,假设两者都在同一页面中制作,我将如何区分它们在客户端的返回?

直接的解决方案是将两个调用合并在一起,但如果这种情况是不可能的,我将如何管理它?在这个特定的实例中,一个users.get调用是在页面加载时在页面的标题中进行的,另一个调用是users.get从页面内容内部进行的。

完全清楚一个调用在标头中,另一个在内容中意味着如果在客户端使用它而不是,它可能会起作用,但这仍然涉及竞争条件,所以我想知道是否有任何处理此问题的标准方法。.once().on()

4

1 回答 1

1

socket(您调用的东西)的给定实例.on等于一个连接,而连接又等于一个特定的客户端。如果 2 个客户端进行类似emit操作,它将到达 2 个不同的套接字,并且您的处理程序可以让您的socket实例将响应返回给特定客户端。

如果同一个套接字发出 2 个信号,那么这是客户端-服务器应用程序级别的协议问题,应该在客户端和服务器中处理。也许这意味着请求之间(对您的应用程序)没有真正的区别,因此哪个响应“首先”到达并不重要。如果存在差异,则可以在请求中添加“请求 ID”字段,并在响应中回显该字段,允许客户端将每个响应与触发它的原始请求相关联。

于 2013-05-05T03:18:56.453 回答