假设我有一个侦听通用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
消息创建两个套接字users.get
,我将如何区分它们在客户端的返回,假设两者都在同一页面中生成?
立即解决方案是将两个调用合并在一起,但如果这种情况不可能,我将如何管理呢?在此特定实例中,在页面加载时在页面标题中进行一次users.get
调用,并在页面内容中创建另一个users.get
。
完全清楚标题中有一个调用,而内容中的另一个调用意味着如果在客户端使用.once()
而不是{{ 1}},但这仍然涉及竞争条件,所以我想知道是否有任何标准的处理方法。
答案 0 :(得分:1)
socket
的给定实例(您称之为.on
的事物)等于连接,而连接又等于特定客户端。如果2个客户端生成类似emit
,它将到达2个不同的套接字,您的处理程序可以使socket
实例将响应返回给特定客户端。
如果同一个套接字发出2个发送,那么这是客户端 - 服务器应用级协议问题,应该在客户端和服务器中处理。也许这意味着请求之间没有(对你的应用程序)没有任何区别,所以哪个响应“首先”到达并不重要。如果是差异,则可以在请求中添加“请求ID”字段,并在响应中回显该字段,允许客户端将每个响应与触发它的原始请求相关联。 / p>