websocket-client는 Python용 WebSocket 클라이언트입니다. WebSocket용 하위 수준 API에 대한 액세스를 제공합니다. websocket-client는 WebSocket 프로토콜의 hybi-13 버전을 구현합니다. 이 클라이언트는 현재 RFC 7692의 permessage-deflate 확장을 지원하지 않습니다.
이 프로젝트의 문서는 https://websocket-client.readthedocs.io/에서 찾을 수 있습니다.
기여 가이드라인을 참조하세요.
pip install websocket-client
사용하여 설치하거나 pip install -e .
코드의 로컬 복사본에서 설치합니다. 이 모듈은 Python 3.9+에서 테스트되었습니다.
특정 웹소켓 클라이언트 기능을 활성화하기 위해 설치할 수 있는 몇 가지 선택적 종속성이 있습니다.
python-socks
설치하고 약간의 성능 향상을 위해 wsaccel
설치하려면 다음을 사용하십시오: pip install websocket-client[optional]
websockets
설치하려면 다음을 사용하십시오: pip install websocket-client[test]
Sphinx
및 sphinx_rtd_theme
설치하여 프로젝트 문서를 작성하려면 다음을 사용하십시오: pip install websocket-client[docs]
엄격한 종속성은 아니지만 rel은 자동 재연결과 함께 run_forever
사용할 때 유용합니다. pip install rel
사용하여 rel을 설치합니다.
각주: zsh와 같은 일부 셸에서는 [
및 ]
문자를 로 이스케이프해야 합니다.
추가 지침은 설명서의 FAQ를 확인하세요: https://websocket-client.readthedocs.io/en/latest/faq.html
이 라이브러리의 알려진 문제에는 WebSocket 압축 지원 부족(RFC 7692) 및 최소 스레딩 문서/지원이 포함됩니다.
send
및 validate_utf8
메소드는 때때로 병목 현상을 일으킬 수 있습니다. skip_utf8_validation
매개변수를 사용하면 이 라이브러리에서 UTF8 유효성 검사를 비활성화하고 성능 향상을 얻을 수 있습니다. 더 나은 성능을 얻으려면 wsaccel을 설치하십시오. websocket-client는 wsaccel에 의존하지 않지만 가능한 경우 사용됩니다. wsaccel은 UTF8 검증 속도를 두 배로 높이고 send
프로세스의 일부로 페이로드 데이터를 마스킹할 때 성능을 10% 정도 향상시킵니다. Numpy는 제안된 성능 향상 대안이었지만 문제 #687에서는 도움이 되지 않는 것으로 나타났습니다.
더 많은 예제는 예제 문서에서 찾을 수 있습니다.
대부분의 실제 WebSocket 상황에는 수명이 더 긴 연결이 포함됩니다. WebSocketApp run_forever
루프는 다음과 함께 제공되는 경우 네트워크 연결이 끊어지면 열려 있는 WebSocket 연결에 자동으로 다시 연결을 시도합니다.
dispatcher
인수(rel 또는 pyevent와 같은 비동기 디스패처)reconnect
인수(연결 끊김과 재연결 시도 사이의 지연) run_forever
on_message
및 on_error
와 같은 콜백을 사용하여 다양한 이벤트 기반 연결 제어를 제공합니다. run_forever
서버가 WebSocket을 정상적으로 닫는 경우(표준 websocket 닫기 코드 반환) 자동으로 다시 연결하지 않습니다 . 이것이 결정의 논리입니다. 서버가 WebSocket을 닫을 때 동작을 사용자 정의하는 것은 on_close
콜백에서 처리되어야 합니다. 이 예에서는 자동 재연결을 제공하기 위해 디스패처에 rel을 사용합니다.
import websocket
import _thread
import time
import rel
def on_message ( ws , message ):
print ( message )
def on_error ( ws , error ):
print ( error )
def on_close ( ws , close_status_code , close_msg ):
print ( "### closed ###" )
def on_open ( ws ):
print ( "Opened connection" )
if __name__ == "__main__" :
websocket . enableTrace ( True )
ws = websocket . WebSocketApp ( "wss://api.gemini.com/v1/marketdata/BTCUSD" ,
on_open = on_open ,
on_message = on_message ,
on_error = on_error ,
on_close = on_close )
ws . run_forever ( dispatcher = rel , reconnect = 5 ) # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
rel . signal ( 2 , rel . abort ) # Keyboard Interrupt
rel . dispatch ()
짧은 메시지를 전달하고 완료되면 즉시 연결을 끊고 싶은 경우입니다. 예를 들어 WebSocket 서버가 실행 중이고 특정 요청에 올바르게 응답하는지 확인하려는 경우입니다.
from websocket import create_connection
ws = create_connection ( "ws://echo.websocket.events/" )
print ( ws . recv ())
print ( "Sending 'Hello, World'..." )
ws . send ( "Hello, World" )
print ( "Sent" )
print ( "Receiving..." )
result = ws . recv ()
print ( "Received '%s'" % result )
ws . close ()