Python の WebSocket ライブラリ

ちょっと調べてみたら、想像してたよりもライブラリが充実していたので、各ライブラリの特徴をまとめておきます。

AutobahnPython

AutobahnPython 用にサーバー、クライアント用のライブラリを提供しています。

AutoBahn Python は Pure Python で Twisted に依存しています。 Twisted を使うなら Autobahn でいいのですが、そうでない場合は別のものを使う必要があります。

Autobahn は Python 用以外に JavaScriptJava(Android) 用にもライブラリを提供していて、また他の多くのプロジェクトでも利用されている WebSocket 用のテストスイートも提供しています。高品質な WebSocket ライブラリがいっぱい揃っているのは多分このテストスイートのおかげでしょう。

Tornado

Tornado は標準で WebSocket Handler を提供していて、簡単に WebSocket に対応することができます。

tornado.websocket.WebSocketConnect を使ってクライアントになることもできます。

ws4py

WebSocket4Python は Twisted以外にも、スレッド・gevent・Tornadoなどに対応したサーバー・クライアントライブラリです。 Autobahn のテストスイートを(多分一部の実装も)利用しています。

gevent-websocket

gevent-websocket は、 gevent の pywsgi を WebSocket に対応させることに特化したライブラリです。これも Autobahn テストスイートを利用しています。ただ、半年ほど更新が無いようなのがちょっと気がかりです。 (やっと WebSocket の仕様が安定して修正が要らなくなっただけかもしれませんが)

websocket-client

websocket-clientliris さんが開発されたクライアントライブラリです。

WebSocket はサーバーとクライアントのどちらも非同期的にメッセージを送れるので、他のライブラリはイベントドリブンかスレッド・geventを前提に作られているのですが、このライブラリは同期的に使えるのが特徴です。

実際にはクライアントの送信とサーバー側の送信のタイミングが完全に非同期ではないことも多いですし、チャットなどのサーバーを書く場合でもテスト用クライアントを書くときはサーバーからメッセージが来るタイミングが予期できるので、同期的な書き方ができるのは大変便利です。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。