DjangoでWebSocket

wan, 2015-06-02(火), Django

Django

DjangoでWebSocket

Djangoでサーバーサイドプッシュってどうやるの? って事で調べてみました。

ポーリング、SSE、ajax、http2、WebSocketと色々方法ありますが、 今回はWebScoketを試します。

今回このスライドが勉強になりました。

The State of WebSockets in Django from Rami Sayar

すごく端折って要約すると、こんな感じです

PythonでWebsocketsメンドクサイ。
二つ理由があって、一つはWSGIってWebScoketをサポートしてないし、PythonのフレームワークってFastCGIとmod_wsgi多いよね。
もう一つはそもそもPythonってイベント指向に設計されてないよね、だからGeventやtwisted/tornado使う必要があるよね。
Djangoから使うには結構ハードル高い...けどちゃんと解決方法はあるよ!
1. Gevent-socketio
2. Django-WebSocket-Redis
3. SwampDragon
結果から言うとDjangoでWebScoketは不可能ではないよ!

ということで今回は名前がイカしてる理由でSwampDragonを試してみました。

公式ドキュメント: http://swampdragon.net/

"SwampDragonとはDjangoで作られており、少しのコードを追加するだけで既存のDjangoプロジェクトでもwebsocketを簡単に扱えるようになるよ!"(公式ドキュメント意訳) 特徴はDjangoのORマッパーをそのままデータフィルターに使えるみたいです

pip install swampdragonすると以下の構成になります。

backports.ssl-match-hostname (3.4.0.2)
certifi (2015.4.28)
Django (1.8.2)
pip (6.0.6)
python-dateutil (2.4.2)
redis (2.10.3)
setuptools (11.0)
six (1.9.0)
sockjs-tornado (1.0.1)
SwampDragon (0.4.2.2)
tornado (4.2)
tornado-redis (2.4.18)

基本的な構造はSockJSでWebScoket通信をしていて、Tornadoのサーバーで待ち受けたデータをrouters.pyでマッピングして mixinでシリアル化してRedisへみたいな感じですごく解りやすい仕組みになっています。

公式ドキュメントチュートリアルをやってみましたが簡単にDjangoでWebScoketを扱う事ができました。 今後はSwampDragonを使って何か作ってみたいと思います。

ツイート このエントリーをはてなブックマークに追加