Node.js v0.6.0 이상 (RedisStore 포함)에서 제공하는 네이티브 클러스터 기능을 사용하여 Socket.io 멀티 스레드를 실행하고 있습니다.클러스터가있는 Socket.io : 열려있는 모든 연결을 반복합니다.
상태가 변경 될 때마다 서버는 각 연결을 반복하고 적절한 경우 메시지를 보냅니다. 참고 : 모든 연결에 "브로드 캐스팅"하지 않습니다. 클라이언트가 연결시 보낸 데이터와 서버 데이터를 비교하여 해당 클라이언트에 서버 데이터를 보낼지 여부를 결정합니다. 이 코드 샘플을 고려하십시오. 8 노드 실행중인 프로세스가있는 경우
io.sockets.clients().forEach(function (socket) {
socket.get('subscription', function (err, message) {
if(message.someProperty === someServerData) {
socket.emit('position', someServerData);
}
});
이 하나 개의 프로세스 만했지만, 지금은, 클라이언트가 각 노드 공정 (대한 메시지를 수신 할 때 이것은 좋은 일을 즉, 모든 클라이언트가 메시지를 수신 8 번).
왜 문제가 발생했는지 이해하지만 수정이 확실하지 않습니다. 한 프로세스에서 클라이언트에 대해서만 일대일 관계를 할당하려면 어떻게해야합니까? 클러스터의 NODE_WORKER_ID
을 사용하는 것이 아마도 뭔가요?
This previous 그럼 내가 도움이 될지 모르겠지만 질문은 다소 관련이있는 것 같습니다.
꽤 일반적인 요청 인 것 같습니다. 확실하게, 나는 무엇인가 놓치고있을 것임에 틀림 없는가?
? 어떻게 든 사용자를 인증하거나 무엇을? – alessioalex
@alessioalex 서버는 비행 위치의 긴 흐름을 읽고 그 비행을 구독하는 클라이언트에게 위치 업데이트를 보냅니다 (예 : 클라이언트가 AWE150을 구독하고 AWE150과 관련된 모든 새로운 위치를 수신함). 따라서 모든 새 위치에 대해 노드 서버는 열려있는 모든 연결을 반복하고 해당 위치로 해당 연결을 전달합니다. 아마도 내 접근 방식이 잘못되었을거야? –
@David Chouinard 왜 방을 사용하지 않니? 클라이언트 x는 'AWE150' 방에 합류하고 그 데이터는'io.sockets.to ('AWE150 ')입니다. emit ('position ', somedata)' – 3rdEden