「双方向通信をシステムに組み込みたい」
「サーバーからクライアントへプッシュ型の情報配信を行いたい」
「PythonでWebSocket通信を実現したい」
このような場合には、websocketsがオススメです。
この記事では、PythonでWebSocket通信を可能にするwebsocketsについて解説しています。
本記事の内容
- websocketsとは?
- websocketsのシステム要件
- websocketsのインストール
- websocketsの動作確認
それでは、上記に沿って解説していきます。
websocketsとは?
websocketsとは、PythonでWebSocket通信を行うためのライブラリです。
websocketsを用いて、サーバーとクライアントを構築できます。
非同期I/Oフレームワークのasyncioをベースにして、websocketsは開発されています。
また、エレガントなコルーチンベースのAPIを提供しています。
簡単に言うと、WebSocket通信を簡潔にコーディングできるということです。
asyncioがPythonの標準ライブラリであるため、パフォーマンスも良いでしょう。
以上、websocketsについて説明しました。
次は、websocketsのシステム要件を説明します。
websocketsのシステム要件
現時点(2022年4月)でのwebsocketsの最新バージョンは、10.2となります。
この最新バージョンは、2022年2月21日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
このサポート状況を見ると、websocketsがよくメンテナンスされていることがわかります。
それは、以下のPython公式開発サイクルと同じだからです。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
実際、websocketsのメンテナンス頻度は高いです。
したがって、websocketsは安心して利用できると言えます。
以上、websocketsのシステム要件を説明しました。
次は、websocketsのインストールを説明します。
websocketsのインストール
検証は、次のバージョンの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
では、websocketsのインストールです。
websocketsのインストールは、以下のコマンドとなります。
pip install websockets
websocketsのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- ------- pip 22.0.4 setuptools 62.1.0 websockets 10.2 wheel 0.36.2
websocketsには、依存するパッケージが存在していません。
そのため、既存環境にも容易に導入できますね。
以上、websocketsのインストールを説明しました。
次は、websocketsの動作確認を行います。
websocketsの動作確認
サーバーとクライアントをそれぞれ用意します。
server.py
import asyncio import websockets async def hello(websocket): name = await websocket.recv() print(f"<<< {name}") greeting = f"Hello {name}!" await websocket.send(greeting) print(f">>> {greeting}") async def main(): async with websockets.serve(hello, "localhost", 8765): await asyncio.Future() # run forever if __name__ == "__main__": asyncio.run(main())
まず、server.pyを起動します。
$ python server.py
起動した状態で何も表示されません。
このまま、別のターミナルからclient.pyを起動。
$ python client.py What's your name?
名前を聞かれるので、適当に「test1」と入力。
入力すると、次のように表示されます。
$ python client.py What's your name? test1 >>> test1 <<< Hello test1!
サーバー側のスクリプトを起動したままのターミナルを確認します。
$ python server.py <<< test1 >>> Hello test1!
サーバーとクライアントが通信できているのが、確認できます。
再度、クライアント実行してみます。
$ python client.py What's your name? test2 >>> test2 <<< Hello test2!
このときのサーバー側の状況は、以下。
$ python server.py <<< test1 >>> Hello test1! <<< test2 >>> Hello test2!
追記されていますね。
これでwebsocketsによる双方向通信がイメージできたのではないでしょうか?
以上、websocketsの動作確認を説明しました。