Python

[Python] websockets - 웹소켓 연결 확인

비번변경 2025. 4. 15. 19:02

개요

2025.04.06-[Python] websockets - 연결 종료 시 자동 재연결에서 연결이 자동으로 종료되는 경우, 자동으로 재연결을 시도하도록 코드를 개선했었다.

확인해보니 어떤 웹소켓 서버의 경우에는 기본적으로 아무 데이터도 수/발신하지 않는 상태로 120초 정도가 경과하면 웹소켓 연결을 종료한다고 한다. 때문에 websockets 라이브러리는 클라이언트에서 서버와의 연결을 확인함과 동시에 keepalive 역할을 할 수 있는 ping 함수를 제공하고 있다.

 

사용 방법을 가볍게 알아본다.

 

 

websockets.ping

websockets.ping 함수는 0x9 연산코드를 포함하는 Ping 프레임을 보낸다. 

pong_waiter = await websocket.ping()

# only if you want to wait for the corresponding pong
latency = await pong_waiter

 

 

예시 )

import asyncio
from websockets.asyncio.client import connect
import json


async def connect_test(url, send_data):
    # 웹소켓 통신
    async with connect(url) as websocket:
        # 요청
        pong_waiter = await websocket.ping()
        print(pong_waiter)

        latency = await pong_waiter
        print(latency)



async def main():
    lst_request_info = ["wss://ws-api.korbit.co.kr/v2/public",
                        "wss://api.upbit.com/websocket/v1"]

    await connect_test(*lst_request_info[0])
    await connect_test(*lst_request_info[1])


if __name__ == "__main__":
    asyncio.run(main())

실행해보면 ping 요청에 대한 latency를 확인할 수 있다.

 

 

참고 문서

https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2

 

 

728x90