개요
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