完全自分用備忘録:Djangoで作ったチャットアプリをheroku上で動作させるために必要な知識の整理
ローカルでちゃんと動くチャット機能をheroku 上で試したところ、
Error during WebSocket handshake: Unexpected response code: 404
が吐き出される。
エラー文をコピペしてググってみても違う言語、JAVAとかRubyとかばかりヒットして、しかもそれぞれ原因がバラバラっぽくて「ここを直せば動くっぽいな」っていうのが全然見えてこない(ぐぐり力が足りないのかもしれない)
そもそもこのチャット機能、プロトコルもHTTPじゃないし、
知らない用語・考え方・技術がたくさん登場して、
訳わからないながらどうにか実装したと言う感じで
しばらく経ってみたらもうすっかり用語とか仕組みとか忘れ去っているので、ググってもちっとも理解が進まない。
と言うわけで、完全自分用に、今回調べたこと・分かったこと・自分の思考の履歴などをこの記事に記録してゆくことにする。細切れに更新を繰り返します。
用語
ASGIとは?
非同期通信が可能なWSGI
そもそもWSGIってなんだっけ?
Web Server Gateway Interface は、プログラミング言語Pythonにおいて、WebサーバとWebアプリケーションを接続するための、標準化されたインタフェース定義である。(wikipedia)
PythonはWebアプリ/Webサービスを作るときのプログラミング言語です。PHPと同様にZope、Twisted、Django、TurboGears等複数のフレームワークが存在します。
ただ、使用するフレームワークによって、利用可能なサーバーが制限されてしまったり、逆にサーバーによって利用可能なWebアプリケーションフレームワークが制限されることがあります。
WSGI(Web Server Gateway Interface)とは、サーバーとWebアプリケーションをつなぐ共通のインターフェースをPythonで定義したものです。
インターフェースというと難しく思えますが、要するにWSGIはクッションです。
例えば、JavaはサーバーとWebアプリケーションをつなぐ際にJava Servelet APIを使います。すると、フレームワークを気にせずに動作させることが可能です。
つまり、WSGIはJavaにおけるJava Servelet APIです。WebサーバーとWebアプリケーション間のインターフェースを定義しています。WSGIを利用することで、WebサーバーとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができます。
WSGIとは?PythonとWebアプリケーション | Hornet|静岡拠点のWeb、ホームページ制作
なるほど。
サーバー内で発生する、webサーバーとフレームワーク(Django)とのやりとりを仲介する、橋渡し的な役割を果たすと言うことはわかった。
ちなみに読み方は「ウィズギー」らしい。
WSGIの動作には2種類のWSGIが必要になります。1つはWebサーバー側、そしてもう一つはWebアプリケーションフレーム側に必要です。双方のWSGIが汎用的なインターフェースでリクエスト情報・レスポンスヘッダ・レスポンス本文等をやりとりすることによって稼働します。
この仕組みのおかげでWSGIに対応したWebサーバーと、WSGIをサポートするアプリケーションフレームワークであれば組み合わせることが可能になります。
Daphneとは?
Daphne is a pure-Python ASGI server for UNIX
channel_layersってなんだっけ?
Channel layers allow you to talk between different instances of an application. They’re a useful part of making a distributed realtime application
チャネルレイヤーを設定すると違う端末同士でリアルタイムに対話ができるようになるよ、程度の意味合いかな。
Redisを使用。
herokuのdynoってなんだっけ?
herokuでは、プロセスの処理はdynoによって行われます。
プロセスの処理とはHTTPのリクエストやレスポンス、バックグラウンド処理などです。
dynoは3種類あり、処理をするプロセスの種類によって使い分けられます。
web dyno
worker dyno
one-off dyno
で、結局404エラーの原因てなんなの?
さぁ?わかったら追記します。