2017-09-26 1 views
0

나는 시세 데이터를 생성하는 단일 스트림 소스 S를 가지고 있습니다.단일 소스의 여러 서버로 소켓 io를 통해 스트리밍

소켓 io를 사용하는 노드 응용 프로그램에 S를 통합하고 싶습니다. 내 애플 생산에서 다중 서버 환경에서 실행, 이제 서버 A와 B 처음

, 나는 단순히 생각했던 가정 해 봅시다 :

  1. 를 사용하여 소켓 입출력 레디 스 어댑터 : https://github.com/socketio/socket.io-redis A와 B 모두

  2. A와 B를 모두 S에 연결하고 단순히 A와 B가 적절한 방에 청크를 브로드 캐스트하여 S에서 나오는 데이터 청크를 처리하도록합니다.

그러나, 이것에 대해 생각 후에, 나는 A와 B가 모두 클라이언트에 동일한 데이터를 방송 어디 아마 문제로 실행됩니다 실현하고 (클라이언트는 동일한 정보의 중복을 받는다). 나는 이것을 정확하게 생각하고 있는가? 어떻게 이것을 피할 수 있습니까?

답변

1

하나의 클라이언트가 하나의 서버에 연결되어 있어야하며 같은 서버에 동일한 연결이 열려 있어야합니다. 세션 끈적임이라고하며 두 개의 연결이 열려 있지 않습니다. 이를 위해서는 서버 풀에서로드 밸런서 역할을하는 프록시를 사용해야합니다. 예를 들어 nginx를 사용할 수 있습니다.

일부 사용자는 서버 A의 룸과 서버 B의 룸에 있기 때문에 서버에서 룸을 동기화하여 방의 모든 사용자에게 올바르게 브로드 캐스트해야합니다. 의 nginx와 WebSocket을 약

문서 : https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

그것은 당신이 레디 스 어댑터에 대해 잊고 생각

+0

을 도움이되기를 바랍니다. 어댑터를 사용하여 한 서버에서 브로드 캐스팅하면 연결된 redis 인스턴스를 조회하고 연결된 모든 클라이언트 (서버 B를 통해 연결된 이벤트)를 찾은 다음 데이터를 모두 ALL로 푸시합니다. 따라서 복제에 대한 염려가 있습니다. 데이터의). – pQuestions123

+0

redis 어댑터는 내 대답의 두 번째 단락을 수정합니다. 그러나 당신이 redis 클라이언트를 사용하고 있다면 항상 그것을 통해서만 방송해야합니다. 분명히 서버에서 브로드 캐스트 한 다음 어댑터로 다시 브로드 캐스트하는 경우 일부 클라이언트는 동일한 데이터를 두 번 가져옵니다. 단일 클라이언트와의 통신은 평소와 같은 방식으로 수행 할 수 있습니다. –

+0

내 문제는 모든 서버가 어댑터를 통해 동일한 데이터를 브로드 캐스팅하고 클라이언트가 동일한 데이터를 두 번 수신하지 않는 것입니까? – pQuestions123

관련 문제