2013-05-03 2 views
4

일반 message에서 수신 대기하는 소켓 서버가 있고 다른 페이로드로 인해 동작이 변경되는 경우를 가정 해 보겠습니다. 예를 들어 : emit s는 users.get 메시지와 함께 만들어메시지가 같을 때 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); 
}); 

소켓이 경우, 어떻게 모두 같은 페이지에 만들어진 가정, 클라이언트 측에서 자신의 수익률을 구별 할 수 있을까?

즉각적인 해결책은 두 개의 호출을 병합하는 것이지만 불가능한 경우 어떻게 관리해야합니까? 이 특별한 경우에 하나의 호출은 페이지로드시 페이지의 헤더에서 이루어지며 또 다른 users.get은 페이지 내용 내부에서 호출됩니다.

하나의 호출이 헤더에 있음 전체 잘 알고, 또 다른 내용에 그것을 작업 클라이언트 측에 .once() 대신 .on()으로 사용하는 경우 있음을 의미하지만 여전히 경쟁 조건을 포함, 그래서이 문제를 다루는 표준 방법이 있는지 궁금합니다.

답변

1

주어진 인스턴스 socket (사용자가 .on이라고 부르는 것)은 연결과 동일하며, 특정 클라이언트와 동일합니다. 2 명의 클라이언트가 비슷한 emit을 만들면 2 개의 다른 소켓에 도착하게되고 처리기는 socket 인스턴스를 사용하여 특정 클라이언트에 대한 응답을 반환 할 수 있습니다.

동일한 소켓에서 2 개의 발광이 발생하면 이는 클라이언트 - 서버 앱 수준 프로토콜 문제이므로 클라이언트와 서버에서 처리해야합니다. 어쩌면 요청간에 앱간에 차이가 없으므로 어떤 응답이 '처음'도착했는지는 중요하지 않을 수 있습니다. 만약 이라면 차이점은 요청에 "요청 ID"필드를 추가하고 그 필드를 응답에 에코하여 클라이언트가 각 응답을 트리거 한 원래 요청과 연관시킬 수 있도록합니다.

+0

동일한 사용자로부터 동일한 요청을 구별 할 구체적인 방법은 없습니까? – Salar

관련 문제