Connection 관리

PING/PONG

업비트 OpenAPI WebSocket 서버는 2019년 3월 27일부터 안정적인 커넥션 관리와 유지를 위해 WebSocket PING/PONG Frame을 지원합니다.
(참고 문서 : https://tools.ietf.org/html/rfc6455#section-5.5.2 )

Client to Server PING

  • 서버에서는 기본적으로 아무런 데이터도 수/발신 되지 않은 채 약 120초가 경과하면 Idle Timeout으로 WebSocket Connection을 종료합니다.
  • 이를 방지하기 위해 클라이언트에서 서버로 PING 메시지를 보내서 Connection을 유지하고, WebSocket 서버의 상태와 WebSocket Connection Status를 파악할 수 있습니다.
  • 현재 업비트 OpenAPI WebSocket 서버에서는 PING Frame 수신 대응 준비가 되어있는 상황이며, 클라이언트에서 간단한 구현으로 PING 요청/PONG 응답(PING에 대한 응답 Frame)을 통해 서버의 상태를 파악할 수 있습니다.
  • 이에 대한 구성은 해당 클라이언트 개발문서를 참고 바랍니다.
    (대부분 라이브러리의 경우, ping 함수가 내장되어 있을 가능성이 큽니다.)

📘

v1.1.6 PING Frame 요청이 어려운 경우

다른 방법으로는 PING 메시지를 보냄으로써 Connection을 유지할 수 있습니다.
정상적으로 Connection이 유지되어 있을 경우 10초 간격으로 {"status":"UP"} 응답이 오게됩니다.

$ telsocket -url wss://api.upbit.com/websocket/v1
Connected!
PING
{"status":"UP"}
{"status":"UP"}
{"status":"UP"}
...

WebSocket Compression

업비트 OpenAPI WebSocket 서버에서는 더 빠른 데이터 전송을 위해 WebSocket Compression을 제공하고 있습니다.
(참고 문서 : https://tools.ietf.org/html/rfc7692 )

  • WebSocket Compression을 지원하는 WebSocket 클라이언트에서는, 클라이언트별로 정해진 옵션을 활성화하면 압축된 상태로 통신이 지속됩니다. 사용자의 코드 레벨에는 압축 해제된 상태의 raw data가 제공되기 때문에 사용자는 설정 옵션 활성화 외에 다른 대응 코드를 작성할 필요가 없습니다.
  • WebSocket Compression을 지원하지 않는 WebSocket 클라이언트 에서는 해당 기능을 사용할 수 없으며, Raw JSON 형태의 데이터를 주고받게 됩니다. 해당 기능을 사용하기 위해서는 WebSocket Client 교체가 필요합니다.