2017-11-23 6 views
0

소켓 연결을 설정하기 위해 서버에서 websocket 라이브러리를 사용하고 있습니다.여러 서버에서 websocket 연결 개체 유지

https://github.com/websockets/ws

은 내가 더 클러스터의 한 서버보다, 내가 클러스터의 다른 서버에서 동일한 소켓 연결 개체를 사용하는 방법을 알고 싶어합니다.

는 또한 나는 웹 채팅 구현 기본 웹 소켓을위한 최선의 선택이 무엇인지 알고 싶어하거나

답변

1

여러 서버에서 동일한 실제 소켓 객체를 사용할 수 없습니다 Socket.IO에. socket 객체는 클라이언트와 하나의 물리적 서버 프로세스 사이의 소켓 연결을 나타냅니다. 소켓이 연결되어있는 서버를 알 수있는 가상 소켓 객체를 만들 수 있습니다. 서버에 메시지를 보내면 다른 서버의 실제 소켓을 통해 보낼 수 있습니다.

socket.io/redis adapter은이를 수행하는 가상의 방법 중 하나입니다. node.js 클러스터를 설정하고 redis 어댑터를 socket.io와 함께 사용합니다. 중앙 redis 기반 저장소를 사용하여 각 물리적 연결이 어떤 서비스 프로세스인지 추적합니다. 그런 다음 서버 프로세스에서 특정 클라이언트로 메시지를 보내려면 socket.io를 통해 해당 메시지를 보내고 해당 소켓이 연결되어있는 redis 데이터베이스에서 사용자를 찾아 실제 서버에 연결하고 요청합니다 현재 다른 서버 프로세스에있는 socket.io 연결을 통해 특정 클라이언트로 메시지를 보냅니다. 마찬가지로 소켓 그룹에 브로드 캐스트 할 수 있으며 연결된 실제 서버에 상관없이 메시지가 클라이언트에 도착하는지 확인하는 작업을 모두 수행합니다.

평범한 webSocket 연결에 대해 자신과 비슷한 것을 만들 수도 있고 다른 일부를 만들 수도 있습니다. 나는 평범한 webSocket에 대한 추천을 제공하기 위해 야생에 존재하는 것들에 대해 충분히 익숙하지 않다. 거기에 plenty of articles 수평으로 webSocket 서버를 확장하면 Google에서 찾을 수 있으며 일반 webSocket으로 시작하려는 경우 읽을 수 있습니다.

+0

감사합니다. jfriend00 –

+0

@shubhamkatariya - 질문이 지금 답변 되었으면 답변의 왼쪽에있는 체크 표시를 클릭하여 해당 커뮤니티에 나타낼 수 있으며 올바른 절차에 따라 스택 오버플로에 대한 평판 포인트를 얻을 수 있습니다. – jfriend00