복붙노트

[REDIS] 수평 레디 스와 socket.io를 확장

REDIS

수평 레디 스와 socket.io를 확장

저는 현재 다음과 같은 수평 확장 socket.io 서버를 만드는 오전 :

                 LoadBalancer (nginx)

      Proxy1      Proxy2      Proxy3      Proxy{N}

 BackEnd1   BackEnd2   BackEnd3   BackEnd4   BackEnd{N}

그들은 모두 같은 레디 스 서버에 연결되어있는 경우 내 질문은 소켓 IO 레디 스 모듈은, 내가 백엔드 서버 중 하나에서 프록시 서버 중 하나에 연결된 특정 소켓에 메시지를 보낼 수와, 무엇입니까? 이 경우 엔 어떻게해야하나요?

해결법

  1. ==============================

    1.당신이 socket.io 서버를 확장 할 완, 당신은 부하 분산 장치로 사용의 nginx을 가지고, 설치 고정로드 밸런싱을하는 것을 잊지 마세요, othersie 하나의 연결이 socket.io 서버에 대한 연결을 통과 분산 부하에 따라 여러 서버에 연결됩니다. 그래서 더 나은 고정로드 밸런싱을 사용하는

    당신이 socket.io 서버를 확장 할 완, 당신은 부하 분산 장치로 사용의 nginx을 가지고, 설치 고정로드 밸런싱을하는 것을 잊지 마세요, othersie 하나의 연결이 socket.io 서버에 대한 연결을 통과 분산 부하에 따라 여러 서버에 연결됩니다. 그래서 더 나은 고정로드 밸런싱을 사용하는

    레디 스 팝 / 하위 구현의 도움으로 하나 개 이상의 socket.io 서버와 레디 스 소켓 IO 어댑터를 보내고받을 수있는 메시지와 함께.

    당신이 프록시 및 백엔드에 사용되는 기술 말해 경우에, 나는 당신이 더 많은 정보를 알려 드릴 것입니다.

  2. ==============================

    2.socket.io - 레디 스는 연결된 사용자의 동일한 풀을 공유하여 백엔드 서버의 모든 모듈입니다 사용. 당신은 Backend1에서 방출 할 수 있으며 클라이언트가 Backend4에 연결되어있는 경우 그 메시지를 받게됩니다.

    socket.io - 레디 스는 연결된 사용자의 동일한 풀을 공유하여 백엔드 서버의 모든 모듈입니다 사용. 당신은 Backend1에서 방출 할 수 있으며 클라이언트가 Backend4에 연결되어있는 경우 그 메시지를 받게됩니다.

    그게 내가 클라이언트 커넥트하면, 그것은 동일한 시스템에 남아 있도록하지만 Socket.io이 작업에 대한 키의 nginx에 끈적 끈적한 세션을 사용하는 것입니다. 웹 소켓 여러 긴 폴링 스레드 시작 Socket.IO에 방법, 그들은 모든 필요가 제대로 작동하려면 동일한 백엔드 서버에 있어야하기 때문이다.

    대신에 끈적 끈적한 세션으로, 당신은 WebSocket을를 사용하도록 클라이언트 연결 optons을 변경할 수 있으며, 하나 개의 연결, 하나의 웹 소켓이있을 것 같은이 여러 서버에 여러 개의 연결의 문제점을 제거합니다. 이것은 또한 앱이 대신 WebSocket을 긴 폴링 다운 그레이드 할 수있는 능력을 잃게 만들 것입니다.

  3. from https://stackoverflow.com/questions/34217166/horizontally-scale-socket-io-with-redis by cc-by-sa and MIT license