Webページの変更についてWeb以外のアプリケーションに通知するための最善の方法は何ですか?

inter-process-communicat ipc language-agnostic notifications

ある程度連携しなければならない2つのアプリケーションがあるとしましょう。

  1. Webアプリケーション(PHP、Ruby on Rails、…​)

  2. デスクトップアプリケーション(Java、C、…​)

デスクトップアプリケーションはWebアプリケーションから通知される必要があり、通知の送信と受信の間の遅延は短くなければなりません。 (<10秒)

これを行うための可能な方法は何ですか? 私は10秒間隔でポーリングを考えることができます、しかし多くのデスクトップアプリケーションが通知されなければならないならそれは多くのトラフィックを生み出すでしょう。 LAN上ではUDPブロードキャストを使いますが、残念ながらそれはここでは不可能です…​

私があなたが私に与えることができるどんな考えにも感謝します。

  4  3


ベストアンサー

私は2つの方法を見ることができます:

  • デスクトップアプリケーションがWebアプリケーションをポーリングしています

  • Webアプリケーションがデスクトップアプリケーションに通知します

WebアプリはRSSフィードを公開できますが、デスクトップアプリは10秒ごとにフィードをポーリングする必要があります。

トラフィックはそれほど大きくなくてもかまいません。HTTP HEADリクエストを使用すると、日付の小さいパケットが表示されます最後の変更(便利には_Last-Modified_)の名前です。

3


ここでの「ベストプラクティス」は、期待するデスクトップクライアントの数によって異なります。 通知されるデスクトップが1つしかない場合は、ポーリングが適切な方法である可能性があります。はい、ポーリングはイベントベースの通知よりもはるかにオーバーヘッドがかかりますが、確実に実装するのが最も簡単な方法です。

ポーリングのオーバーヘッドが本当に許容できないものであれば、2つの基本的な選択肢があります。

  1. デスクトップとWebサーバー間で持続的な接続を開いたままにしておく

  2. デスクトップアプリ内からサービスを公開し、サービスのアドレスをWebサーバーに登録します。 このようにして、Webサーバーは必要に応じてデスクトップを呼び出すことができます。

しかし、警告してください – 両方の選択肢はゴチャゴチャいっぱいです。 いくつかのハイライト:

  • あなたのWebサーバをホットスワップ可能にしたいので、接続を開いたままにするのは難しいかもしれません。

  • この要求がハングアップする可能性があるため、Webサーバーから外部サービス(デスクトップなど)に電話をかけるのは危険です。 Webサーバを独占することを避けるために、この通知を別のスレッドに移動してください。

いくつかの懸念を軽減するために、中間の通知サーバーを導入することによって信頼できないデスクトップをウェブサーバーから切り離すことができます – ウェブサーバーはどこかに更新をポストし、デスクトップはそこに通知するためにポーリング/接続/登録できます。 ここで車輪の再発明を避けるために、これはある種のMessageQueueシステムを含むかもしれません…​ これは、もちろん、新しい仲介者を維持する必要があるという複雑さを増します。

繰り返しますが、これらのアプローチはすべて非常に複雑であるため、ポーリングがおそらく最善の策であると思います。

3


私はあなたのタスクを達成するために何をすべきか正確にはわかりませんが、デスクトップアプリケーションPCでWindowsサービスを作成することをお勧めできます。

このサービスは、新しい変更があるかどうかWebアプリケーションをチェックし、変更が発生した場合は、変更が発生したときにWebアプリケーションおよびWebアプリケーションに変更があることを通知してデスクトップアプリケーションを実行できます。

正確に試してみるのではなく、これが役に立つことを願っていますが、このアイデアのように使うことを提案します。

1


シンジケーションの層はシステムのスケールアウトに役立ちます。

デスクトップアプリは「パブリッシャー」サービスに登録することができます(いくつかの/多数のマシンの1つで実行されています)このパブリッシャーサービスはあなたのWebアプリから何かが変わったという「通知」を受け取り、すぐに登録されたすべてのユーザーに通知し始めます。

あなたが必要とする出版社の数はユーザーの数と共に増えるでしょう。

編集:デスクトップアプリがソケットをリッスンする必要があることを言及するのを忘れていました。

1


タイトルとURLをコピーしました