【Python】websocket-clientのインストール

【Python】websocket-clientのインストール プログラミング

「WebSocket通信で処理速度を高めたい」
「サーバーからクライアントへプッシュ型の情報配信を行いたい」
「PythonでWebSocket通信のクライアントを実装したい」

このような場合には、websocket-clientがオススメです。
この記事では、PythonでWebSocket通信用クライアントを実装する方法を解説しています。

本記事の内容

  • websocket-clientとは?
  • websocket-clientのシステム要件
  • websocket-clientのインストール
  • websocket-clientの動作確認

それでは、上記に沿って解説していきます。

websocket-clientとは?

websocket-clientは、Python用のWebSocketクライアントです。
クライアントに特化しているのが、特徴になりますね。

そして、websocket-clientはWebSocketプロトコルのバージョンhybi-13を実装しています。

hybi-13ということで、現状では適切な対応状況と言えます。

以上、websocket-clientについて説明しました。
次は、websocket-clientのシステム要件を説明します。

websocket-clientのシステム要件

現時点(2022年4月)でのwebsocket-clientの最新バージョンは、1.3.2となります。
この最新バージョンは、2022年3月29日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

このサポート状況は、以下のPython公式開発サイクルに従っていますね。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

公式開発サイクルに従うのは、簡単なようで難しいことです。
実際、公式開発サイクルに従っているライブラリはそれほど多くありません。

ほとんどが無視するか、適切にsetup.pyを記載していません。
だから、それだけでwebsocket-clientの信用度はUPします。

まとめると、websocket-clientのシステム要件はPython 3.7以降だけですね。
Python 3.7以降にだけ注意すれば、特に問題はないでしょう。

以上、websocket-clientのシステム要件を説明しました。
次は、websocket-clientのインストールを説明します。

websocket-clientのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.0.4
setuptools 62.1.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、websocket-clientのインストールです。
websocket-clientのインストールは、以下のコマンドとなります。

pip install websocket-client

websocket-clientのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package          Version
---------------- -------
pip              22.0.4
setuptools       62.1.0
websocket-client 1.3.2
wheel            0.36.2

websocket-clientには、依存するパッケージが存在していません。
そのため、既存環境にも容易に導入できますね。

以上、websocket-clientのインストールを説明しました。
次は、websocket-clientの動作確認を行います。

websocket-clientの動作確認

以下の2つの動作を確認しておきます。

  • 短命の接続(一時的)
  • 長命の接続(永続的)

短命の接続(一時的)

短命の接続を行うコードは、以下。

import websocket

ws = websocket.WebSocket()
ws.connect("ws://echo.websocket.events")
ws.send("Hello, Server")
print(ws.recv())
ws.close()

上記をコードを実行した結果は、以下。

echo.websocket.events sponsored by Lob.com

これが表示されると、動作は成功しています。
ただ、これだけだとイマイチ動作を掴めません。

そこでデバッグモードにしてログを表示してみます。
以下のコードを追加します。

websocket.enableTrace(True)

場所は、「ws = websocket.WebSocket()」の前です。
コードを追加して、実行した結果は以下。

--- request header ---
GET / HTTP/1.1
Upgrade: websocket
Host: echo.websocket.events
Origin: http://echo.websocket.events
Sec-WebSocket-Key: WHG/vN20l3+7numTNq/smA==
Sec-WebSocket-Version: 13
Connection: Upgrade


-----------------------
--- response header ---
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-Websocket-Accept: 4LEohCwjhgiPrbbec4gqieQ++EY=
Via: 1.1 vegur
-----------------------
++Sent raw: b'\x81\x8dJ\x8e\n{\x02\xebf\x17%\xa2*(/\xfc|\x1e8'
++Sent decoded: fin=1 opcode=1 data=b'Hello, Server'
++Rcv raw: b'\x81*echo.websocket.events sponsored by Lob.com'
++Rcv decoded: fin=1 opcode=1 data=b'echo.websocket.events sponsored by Lob.com'
++Sent raw: b'\x88\x82\x8d\xba\xc2\x0c\x8eR'
++Sent decoded: fin=1 opcode=8 data=b'\x03\xe8'
echo.websocket.events sponsored by Lob.com

先ほどよりは、これで外部サーバーと通信しているのがわかります。

長命の接続(永続的)

WebSocketでは、永続的にサーバーとクライアントで接続するのが一般的です。
サーバーからのプッシュ型の情報配信も永続的な接続に依存します。

その動作を確認できるのが、以下のコードになります。

import websocket

def on_message(wsapp, message):
    print(message)

wsapp = websocket.WebSocketApp("wss://testnet-explorer.binance.org/ws/block", on_message=on_message)
wsapp.run_forever()

上記を実行すると、継続的に次のような情報が表示されます。

{"blockHeight":24595693,"blockHash":"4C911B38278218F2AD3B883F6C52101EAC0F6DF00B0663A52B5013770D9C9424","timeStamp":1649721471838,"txNum":0,"size":65536,"blockNode":"Everest","blockAge":3,"blockFeeList":[{"blockHeight":null,"address":null,"asset":"BNB","quantity":0E-8}],"feeCompleted":true}

接続が途切れない限り、表示され続けます。

この情報は、サーバーからプッシュ型で配信されている情報です。

以上、websocket-clientの動作確認を説明しました。

タイトルとURLをコピーしました