2

現在、Apacheを介してユーザーにフロントエンドWebサイトを提供するdjangoアプリがあります。フロントエンドはバックエンドにクエリを実行します。バックエンドは、別のサーバーにサービスを提供する別のPythonアプリ(Flask)です。これまでのところ、フロントエンドはバックエンドにデータを照会する必要がありましたが、その逆はありませんでした。

現在、システム内のデータ変更に関してユーザーが受信することを選択できるデータアラートを導入しています。アラートが発生したかどうかを確認するプロセスは、データモデルと密接に関連しているため、バックエンドで発生する必要があります。したがって、フロントエンドはバックエンドにアラートを追加するリクエストを送信し、バックエンドはトリガーが発生したかどうかをポーリングしてチェックします。

問題は、バックエンドでアラートがトリガーされたら、ユーザーにも通知できるようにフロントエンドに通知を受け取る必要があることです。バックエンドは、電子メールなどのユーザーデータを認識しないため、ユーザーに直接アラートを送信できません(このユーザーデータは変更される可能性があるため、アラートの追加要求と一緒にバックエンドに送信するのは単純すぎます)。

したがって、アラート通知をバックエンドからフロントエンドにプッシュする最適な方法を探しています。これを行うための最善のアプローチは何ですか?バックエンドがクエリできるdjangoアプリのビューを設定できますが、フロントエンドがバックエンドにクエリを実行するというアイデアやその逆は好きではありません。これを達成するための最善の策は何ですか?

4

1 に答える 1

4

利用可能ないくつかの方法の概要については、Long-Polling、Websocket、Server-Sent Events(SSE)、Cometとは何ですか?

クライアントが常にポーリングすることなくフロントエンドに更新を伝達できる必要があるため、Webソケットまたはサーバー送信イベントをセットアップする必要があるようです。レガシーシステムの場合は、長いポーリングまたは他の方法(おそらく次のようなサービスを試してください)これらのものをスケーリングするために必要な場合はpusher.io)。これらのアイテムをフラスコまたはdjangoのセットアップに統合するための優れたチュートリアルがいくつかあります。ここにいくつかの素晴らしいチュートリアルがあります:http://blog.jupo.org/2011/08/13/real-time-web-apps-with-django-and-websockets/およびhttp://dev.hasenj.org/post /38188152502

最小限のソリューションを稼働させるには、socket.ioを見て(http://socket.io/)、Pythonライブラリ( PythonのSocket.IOクライアントライブラリ)を使用することをお勧めします。

認証が必要な場合は、ユーザーがログインしたときに、フロントエンドに新しいWebSocketチャネル名のリクエストを送信させ、ログアウトするかCookieの有効期限が切れるまでそのチャネルを開いたままにします。このチャネルを使用して、ユーザーの更新を送信します。

于 2013-03-20T23:41:26.917 に答える