websockets-cli: 웹 프로젝트에 친숙한 동반자

이 기사에서는 지난 몇 개월 동안 작업한 마지막 오픈 소스 프로젝트인 websockets-cli을 소개합니다. websocket 서버와 상호 작용하는 CLI(명령줄 인터페이스)입니다.

왜요?



이 프로젝트에는 두 가지 주요 이유가 있습니다.
  • 웹 소켓과 관련된 웹 프로젝트에서 작업할 때마다 내가 가지고 있는 것을 테스트하기 위한 간단한 CLI 도구가 필요하다는 것을 알게 되었습니다.
    코딩. 나는 적절한 라이브러리를 찾을 수 없었기 때문에 항상 이 문제를 해결하기 위해 스크립트를 작성하게 되었습니다.
  • 해보면 재밌는 프로젝트에요🙃

  • 물론 웹소켓에 도움이 되는 Postman과 같은 그래픽 솔루션이 있지만 그러한 테스트를 위해 터미널 작업을 선호하는 사람은 나만이 아닐 것입니다.

    설치



    설치하려면 python3.7 이상 및 pip가 설치되어 있어야 합니다. 그런 다음 다음을 입력할 수 있습니다.

    $ pip install websockets-cli
    


    poetry 과 같은 다른 패키지 관리자를 사용할 수도 있습니다. 나는 가지고있다
    이 도구를 모르는 경우 atutorial를 참조하십시오.

    $ poetry add -D websockets-cli
    


    일종의 전역 설치를 원하는 경우 pipx 라이브러리를 사용할 수 있습니다.

    $ pipx install websockets-cli
    


    설정



    필요에 따라 구성할 수 있는 많은 설정이 있습니다. 공식 문서의 thissection에 모두 정의되어 있습니다. 다음을 사용하여 구성할 수 있습니다.

  • pyproject.toml 파일
  • 환경 변수
  • 현재 작업 디렉토리 또는 홈 디렉토리에 이름이 .ws.env인 사용자 정의 env 파일.

  • 메모:
  • pyproject.toml 파일이 환경 변수보다 우선합니다.

  • 용법



    CLI는 사용이 간단합니다. 사용 가능한 모든 명령을 알고 싶으면 터미널에 ws를 입력하십시오.

    $ ws
    Usage: ws [OPTIONS] COMMAND [ARGS]...
    
      A convenient websocket cli.
    
      Example usage:
    
      # listens incoming messages from endpoint ws://localhost:8000/path
      $ ws listen ws://localhost:8000/path
    
      # sends text "hello world" in a text frame
      $ ws text wss://ws.postman-echo.com/raw "hello world"
    
      # sends the content from json file "hello.json" in a binary frame
      $ ws byte wss://ws.postman-echo.com/raw [email protected]
    
    Options:
      --version   Show the version and exit.
      -h, --help  Show this message and exit.
    
    Commands:
      byte                Sends binary message to URL endpoint.
      echo-server         Runs an echo websocket server.
      install-completion  Install completion script for bash, zsh and fish...
      listen              Listens messages on a given URL.
      ping                Pings a websocket server located at URL.
      pong                Sends a pong to websocket server located at URL.
      session             Opens an interactive session to communicate with...
      tail                An emulator of the tail unix command that output...
      text                Sends text message on URL endpoint.
    


    설치 완료



    사용할 첫 번째 명령은 명령 및 옵션에 대한 완성 지원을 추가하는 install-completion입니다. bash , fishzsh 에서 작동합니다. Windows 지원(Powershell)이 예정되어 있습니다.

    $ ws install-completion
    # when the command succeeded, you should see the following message
    Successfully installed completion script!
    


    에코 서버



    Postmandoes과 같은 echo websocket 서버를 자체 호스팅하려는 경우 echo-server 명령을 실행할 수 있습니다. 다음은 예입니다.

    $ ws echo-server -H ::1 -p 8000
    Running server on ::1:8000 💫
    # To stop the server, you can just tap Ctrl+C
    ^CProgram was interrupted by Ctrl+C, good bye! 👋
    


    듣다



    종종 websocket 끝점에서 들어오는 메시지를 보고 싶을 것입니다. websockets-cli를 사용하면 정말 쉽습니다.

    # assuming you have an endpoint localhost:8000 sending messages
    $ ws listen :8000
    # you will have an output like the following
    ──────────────────── TEXT message on 2022-05-25 07:10:07 ────────────────────────────────────
    {"hello": "world"}
    ──────────────────── BINARY message on 2022-05-25 07:10:07 ──────────────────────────────────────
    b'{"hello": "world"}'
    


    세션



    아마도 가장 많이 사용하게 될 명령일 것입니다. 웹 소켓 서버와 완전한 상호 작용을 허용합니다. ping , pong , close , textbinary 프레임을 보낼 수 있습니다.

    $ ws session wss://ws.postman-echo.com/raw
    Welcome to the interactive websocket session! 🌟
    For more information about commands, type the help command.
    When you see <> around a word, it means this argument is optional.
    To know more about a particular command type help <command>.
    To close the session, you can type Ctrl+D or the quit command.
    
    > help
    The session program lets you interact with a websocket endpoint with the
    following commands:
    
    • ping <message>: Sends a ping with an optional message.
    • pong <message>: Sends a pong with an optional message.
    • text message: Sends text message.
    • byte message: Sends byte message.
    • close <code> <reason>: Closes the websocket connection with an optional code
    and message.
    • quit: equivalent to close 1000.
    
    > help close
    Closes the session given a code and an optional reason.
    
    Example usage:
    
    If no code is given, 1000 is considered as default meaning a normal closure.
    Thus, it is equivalent to the quit command.
    
    ┌────────────────────────────────────────────────────────────────────────────┐
    │ > close                                                                    │
    └────────────────────────────────────────────────────────────────────────────┘
    
    Closes the connection with a code 1001 and no message.
    
    ┌────────────────────────────────────────────────────────────────────────────┐
    │ > close 1001                                                               │
    └────────────────────────────────────────────────────────────────────────────┘
    
    Closes the connection with a code 1003 and a message "received unknown data".
    
    The message length must not be greater than 123 bytes.
    
    ┌────────────────────────────────────────────────────────────────────────────┐
    │ > close 1003 'received unknown data'                                       │
    └────────────────────────────────────────────────────────────────────────────┘
    
    To know more about close codes, please refer to the RFC.
    > quit
    Bye! 👋
    


    prompt-toolkit 덕분에 세션 명령에는 다음과 같은 기능이 있습니다.
  • 구문 강조 표시
  • 하위 명령 자동 완성
  • 현재 세션 중에 입력한 이전 명령 기록을 읽는 기능
  • 현재 세션 내의 기록을 기반으로 명령이 자동 제안됩니다.

  • 프레젠테이션을 위해 여기에서 멈출 것입니다. 프로젝트에 대해 더 알고 싶다면 공식documentation을 읽을 수 있습니다.
    websocket을 많이 사용하신다면 흥미롭게 사용하실 수 있기를 바랍니다. 🙂


    내 기사가 마음에 들고 나와 함께 계속 배우고 싶다면 주저하지 말고 여기에서 나를 팔로우하고 내 newsletter를 구독하세요 😉

    좋은 웹페이지 즐겨찾기