インターネット (完全に別のネットワーク) を介して接続されている webapp (django/node.js) とクライアント (ブラウザーではなく、要求パッケージを使用するコンソール アプリ) があります。クライアントが常に稼働しているわけではなく、信頼性の低いインターネット接続を介してインターネットに接続されていることが予想されます。
アプリケーションの設計についてアドバイスが必要です。システムは次のことを行う必要があります。
サーバーからクライアントにデータをプッシュできるようにする必要があります。これが発生すると、クライアントは受信したデータに基づいてローカルの MSSQL データベースを更新し、データの更新が成功したことをサーバーに確認します (つまり、双方向通信)。 )
サーバーは、クライアントが生きているかどうかを尋ねることもできます... クライアントは、生きている場合に応答します。これは、クライアントの状態を監視するためのハートビートとして使用されます。サーバーが稼働している場合、サーバーはクライアントに長いプロセスを開始するように要求できます (たとえば、データベースのバックアップとアップロードの開始など)。クライアントが応答しない場合、一種のタイムアウトが発生し、サーバーがクライアントに到達できないことを示す電子メールが送信されます。
以下にいくつかの制約を示します。
サーバー側のイベントをクライアントにプッシュしようとしましたが、クライアントはその応答の URL に投稿します。最初の問題は、クライアントがイベントを待っているだけでプロセッサのサイクルを消費することでした (chrome や firefox などのブラウザで試しても同じ問題 - 待っている間、プロセッサの使用率が約 8% 上昇します)とか、ぐらい)。もう 1 つの問題は、サーバーから ARE_YOU_ALIVE をキックするコードが停止し、クライアントが別の場所/ビューに投稿し、その情報を取得する必要があることです。災害が待っているようです。したがって、このアプローチは放棄されます。
トルネードやツイストなどは本当に使いたくないです。今のところ、これに時間を投資したくありません。私のアプリのほとんどはうまく機能しており、この小さな機能のために車輪を再発明したくありません.
node.js と socketio が適切なアプローチであると確信しており、それらを使用したいと考えています。同時に、私は JS 忍者ではなく、django に力仕事をしてもらいたいと思っています。この記事が問題を解決し、最小限の node.js を使用し、django にロジックを任せる方法が気に入っています。ただし、問題は、
node_api(request)
(クライアントが応答を投稿する場所) が、クライアントが応答している ARE_YOU_ALIVE 要求がわからないことです。私は本当に次のような単純なものが必要です:
人々がこの状況に通常どのように対処するかについて、既知のパターンはありますか? 私は何か新しいことをしているように感じますが、これがどのように行われるかについてのドキュメントに出くわしていません. ガイダンスをいただければ幸いです。client_alive = Get_client_status(client) if client_alive: send_command_to_client(command['INIT_BACKUP'] response = Get_client_status(client)
block until response.state == "BACKUP_COMPLETE": response = Get_client_status(client) # need to handle timeout if backup is stuck and will not complete for some reason
else: timeout? send_email_client_dead()