상세 컨텐츠

본문 제목

웹소켓 통신 시 1::, h, a와 같은 문자열

개발자를위한다양한이야기

by codeon 2025. 1. 8. 16:52

본문

반응형

웹소켓 통신 시 1::, h, a와 같은 문자열이 붙는 이유는 주로 SockJS라는 라이브러리를 사용할 때 나타나는 현상입니다. SockJS는 웹소켓을 지원하지 않는 브라우저에서도 웹소켓과 유사한 기능을 제공하기 위한 폴백(Fallback) 메커니즘을 제공합니다. 즉, 웹소켓을 사용할 수 없는 환경에서는 HTTP Long-Polling, HTTP Streaming 등의 방식을 사용하여 실시간 통신을 에뮬레이션합니다. 이때, SockJS는 이러한 폴백 방식들을 관리하고 데이터 전송을 효율적으로 처리하기 위해 특정 문자열들을 사용하여 메시지를 구분하거나 제어합니다.

 

웹소켓 통신 시 1::, h, a와 같은 문자열
웹소켓 통신 시 1::, h, a와 같은 문자열

 


SockJS의 메시지 포맷

SockJS는 단순한 문자열 전송 외에도 다양한 제어 메시지를 사용합니다. 이러한 메시지들은 특정 접두사(Prefix)를 사용하여 구분됩니다.

  • o (open): 연결이 성공적으로 수립되었음을 나타냅니다.
  • c (close): 연결이 종료되었음을 나타냅니다.
  • h (heartbeat): 연결이 살아있는지 확인하기 위한 하트비트 메시지입니다.
  • a (array): 여러 메시지를 묶어서 하나의 메시지로 전송할 때 사용됩니다.
  • m (message): 실제 데이터를 담고 있는 메시지입니다.

1::, 2::, 3:: 등의 형식

1::, 2::, 3::과 같은 형식은 SockJS의 특정 전송 방식에서 사용되는 포맷입니다. 여기서 숫자는 내부적으로 사용되는 메시지 식별자 또는 순서를 나타낼 수 있으며, ::는 메시지 내용과 구분하는 역할을 합니다. 이러한 형식은 주로 HTTP Long-Polling이나 HTTP Streaming과 같은 폴백 방식에서 메시지를 관리하기 위해 사용됩니다.

예시:

클라이언트가 서버에 "Hello"라는 메시지를 보내는 경우, SockJS는 이를 다음과 같은 형태로 변환하여 전송할 수 있습니다.

  • 웹소켓을 사용하는 경우: "Hello" (일반적인 웹소켓 메시지)
  • HTTP Long-Polling을 사용하는 경우: mHello 또는 3::Hello 와 같은 형태로 변환될 수 있습니다. (구체적인 형식은 SockJS 구현에 따라 다를 수 있습니다.)

SockJS를 사용하는 이유

웹소켓은 최신 브라우저에서는 잘 작동하지만, 오래된 브라우저나 특정 네트워크 환경(프록시 서버, 방화벽 등)에서는 제대로 동작하지 않을 수 있습니다. SockJS는 이러한 환경에서도 실시간 통신을 가능하게 하기 위해 다양한 폴백 메커니즘을 제공합니다. 따라서, 웹소켓을 지원하지 않는 환경까지 고려해야 하는 경우 SockJS를 사용하는 것이 유용합니다.

 

요약:

1::, h, a와 같은 문자열은 SockJS가 폴백 메커니즘을 사용할 때 메시지를 관리하고 구분하기 위해 사용하는 특정 포맷입니다. 이러한 문자열들은 웹소켓 자체의 프로토콜에는 포함되지 않으며, SockJS 라이브러리의 구현 방식에 따라 달라질 수 있습니다. SockJS는 웹소켓을 지원하지 않는 환경에서도 실시간 통신을 가능하게 하는 중요한 역할을 합니다.

만약 SockJS를 사용하지 않고 순수한 웹소켓 통신을 사용하는 경우에는 이러한 문자열들이 나타나지 않습니다. 웹소켓은 자체적인 프레임 포맷을 가지고 있으며, 데이터를 직접적으로 전송합니다.

 

반응형

관련글 더보기