2017-02-27 1 views
1

여러 개의 socket.io 서버 (ALB 밸런싱)의 경우 클라이언트가 '전송 오류'를 나타내는 두 노드에 연결되고 연결이 끊어집니다. 이상적으로는 하나의 노드에 연결되어 해당 노드에 연결되어 있어야합니다. ALB에 하나의 노드가있는 경우 연결은 계속 유지됩니다. 어떤 도움 ??socket.io 클라이언트의 연결이 반복적으로 끊어짐

답변

1

기본적으로 socket.io를 처음 시작하면 http 폴링 모드로 시작됩니다. 몇 차례의 순차적 인 HTTP 요청과 양끝의 기능 확인이 끝나면 webSocket 모드로 전환됩니다. 이것은 작업 연결을 먼저 만들고 양쪽 끝에서 webSocket이 지원되는지를 결정하고, 그렇다면 webSocket을 사용하도록 전환하기 위해 수행됩니다. 비 끈적한로드 밸런서를 가지고 있다면, 처음 몇 개의 HTTP 폴링 요청에 문제가 생길 수 있습니다. 다른 서버에서 끝나면 단일 서버에 몇 개의 연결이 누락되어 socket.io의 작동 방식이 손상 될 수 있습니다. 시동 순서.

부하 분산 장치를 고정적으로 구성하여 동일한 클라이언트를 항상 동일한 서버로 보내거나 socket.io에 webSocket 모드로만 연결하도록 지정할 수 있습니다. 여기서 볼 수 있듯이

가 웹 소켓없이 폴링 (그래서 그냥 하나의 연결)를 사용하는 경우에만에 socket.io를 구성하려면 클라이언트에서 구성 옵션을 설정할 수 있습니다

Socket.io 1.x: use WebSockets only?

명심 socket.io에는 자동 연결 논리가 있으므로 서버에 대한 socket.io 연결을 설정 한 후 얼마 지나지 않아 연결이 작동하지 않으면 클라이언트는 현재 연결을 끊고 새 연결을 시도합니다. 여전히 끈적이지 않은로드 밸런서를 사용하는 경우 해당 재 연결은 다른 서버에서 종료 될 수 있습니다. 서버에서 수행중인 작업에 따라 문제가 발생할 수도 있고 그렇지 않을 수도 있습니다. 고정로드 균형 조정을 사용하면 재 연결이 동일한 서버에서 끝납니다.

+0

폴링이 아닌 전송을 websocket으로 직접 사용하여 연결하는 데 따른 단점은 무엇입니까? –

+0

@VikasGoyal - 웹 소켓을 지원하지 않는 브라우저에서 실행하면 연결되지 않습니다. socket.io는 일반적으로 누락 된 webSocket 대신 http 폴링을 대체하여 해당 조건을 처리합니다. – jfriend00

관련 문제