[번역] Socket.IO - 트러블 슈팅 (작성중)

여름노래불러줘·2022년 10월 21일
0

Socket.IO

목록 보기
5/5

트러블 슈팅

흔히 알려진 이슈들:

  • socket 연결 불가능
  • socket 연결 끊김
  • socket 이 HTTP 롱 폴링에서 멈춤
  • 다른 일반적인 문제들

문제: socket 연결 불가능

가능한 풀이들:

  • 순수 웹소켓 서버에 연결하려 함
  • 서버에 도달 불가능
  • 클라이언트가 서버 버전과 호환되지 않음
  • 서버가 필요한 CORS 헤더를 전송하지 않음
  • 끈끈한 세션을 활성화하지 않음 (다중 서버 구성)
  • 양 쪽 요청 경로 불일치

순수 웹소켓 서베 연결하려 함

"Socket.IO 가 아닌 것" 섹션에서 설명했듯, Socket.IO 클라이언트는 웹소켓 구현이 아니기에 transports: ["websocket"] 이 있어도 웹소켓 서버와 연결을 맺을 수 없다.

const socket = io("ws://echo.websocket.org", {
  transports: ["websocket"]
});

서버에 도달 불가능

Socket.IO 서버가 주어진 URL에 실제로 도달가능한지 확인할 것.

curl "<서버 URL>/socket.io/?EIO=4&transport=polling"

이렇게 생긴걸 반환해야 한다.

0{"sid":"Lbo5JLzTotvW3g2LAAAA","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000}

그렇지 않다면 Socket.IO 서버가 가동중인지 확인하고 연결을 방해하는 것이 있는지 확인한다.

노트: v1/v2 서버는 이렇게 생긴걸 반환해야 한다. (which implement the v3 of the protocol, hence the EIO=3)

96:0{"sid":"ptzi_578ycUci8WLB9G1","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}2:40

클라이언트가 서버 버전과 호환되지 않음

JS 클라이언트 호환성 테이블:

[1] allowEIO3: true

Java 클라이언트 호환성 테이블

[1] allowEIO3: true

Swift 클라이언트 호환성 테이블

[1] allowEIO3: true (서버) 그리고 .connectParams(["EIO": "3"])

SocketManager(socketURL: URL(string:"http://localhost:8087/")!, config: [.connectParams(["EIO": "3"])])

[2] allowEIO3: true (서버)
[3] .version(.two) (클라이언트)

SocketManager(socketURL: URL(string:"http://localhost:8087/")!, config: [.version(.two)])

서버가 필요한 CORS 헤더를 전송하지 않음

콘솔에서 이런 에러를 본다면

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ...

아마 이런 뜻이다:

  • Socket.io 서버에 접속할 수 없음 위를 참조
  • Cross-Origin Resource Sharing (CORS) 를 서버에서 설정하지 않음.

0개의 댓글