2013-05-03 74 views
4

比方说,我有一个套接字服务器正在侦听通用message,并且只是由于不同的有效载荷而改变其行为。例如:当它们的消息相同时,如何区分socket.io调用?

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 S跟users.get消息做,我将如何能够自己在客户端回报之间进行区分,假设两个在同一页面进行?

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

充分认识到一个呼叫是在头部,另一种是在内容意味着它威力工作,如果在客户端,.once()是用来代替.on(),但仍然涉及竞争条件,所以我想知道是否有任何标准的处理方式。

回答

1

给定socket(您调用.on)的实例等于连接,这反过来等于特定的客户端。如果2个客户端使用类似的emit它将在2个不同的套接字上到达,并且您的处理程序可以让您的socket实例将响应返回给特定的客户端。

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

+0

有没有具体的方法来区分来自同一用户的相同请求? – Salar 2016-11-19 13:25:17

相关问题