4

私はある程度一緒に働かなければならない2つのアプリケーションがあるとしましょう。ウェブページ上の変更について非ウェブアプリケーションに通知する最も良い方法は何ですか?

  1. Webアプリケーション(PHP、Ruby on Railsは、...)
  2. デスクトップアプリケーション(Javaの、C++、...)

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

どうすればよいですか?私は10秒間隔でポーリングを考えることができますが、多くのデスクトップアプリケーションに通知する必要がある場合は、多くのトラフィックが発生します。 LAN上ではUDPブロードキャストを使用しますが、残念ながらそれはここでは不可能です。

あなたに私に与えることができるアイデアはありがたいです。

+0

私の提案は納得しましたか? – Ahmy

+0

いいえ、それは私の質問で提案したものと本質的に同じです。私はまだ何かを待っている。しかし、私はより良い解決策を得られなかった、私はあなたの答えを受け入れる:) –

答えて

3

ここでの「ベストプラクティス」は、期待するデスクトップクライアントの数によって決まると思います。通知されるデスクトップが1つしかない場合、ポーリングはうまくいくかもしれません。ポーリングはイベントベースの通知よりもはるかにオーバーヘッドですが、実装するのが最も簡単な解決策になるでしょう。 、「彗星」スタイルのWebリクエストすることができた(

  1. は、デスクトップとWebサーバ間の持続的接続を開いてください:ポーリングのオーバーヘッドが本当に受け入れられない場合

    、その後、私は2つの基本的な選択肢を参照してくださいまたはrawソケット接続)

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

両方の選択肢が邪魔に満ちていることに注意してください。いくつかのハイライト:

  • オープン接続を維持することは難しいことができ、あなたのウェブサーバは、ホットスワップ可能な
  • Webサーバから外部サービス(例えば、デスクトップ)に呼び出すようにしたいので、このリクエストがハングアップする可能性があるため、危険です。この通知を別のスレッドに移動して、Webサーバーを縛るのを避ける必要があります。

信頼性の低いデスクトップをWebサーバーから切り離すには、中間の通知サーバーを導入します。Webサーバーはどこかに更新を送信し、デスクトップはポーリング/接続/そこに登録して通知してください。ここに車輪を再創造するのを避けるために、これは何らかの種類のMessageQueueシステムを含む可能性があります...もちろん、これは新しい媒介を維持する必要性の複雑さを追加します。

また、これらのアプローチはすべてかなり複雑なので、おそらくポーリングが最良の賭けと言えます。

1

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

このサービスは、新しい変更の間隔ごとにWebアプリケーションをチェックし、変更が発生した場合は、WebアプリケーションとWebアプリケーションに変更があった場合に応答があることを通知してデスクトップアプリケーションを実行できます了解を得て

私はこれが役に立たないことを願っています。私はそれを正確に試しませんでしたが、私はこの考え方を使用することを提案しています。

3

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

  • あなたのデスクトップアプリケーションをポーリング
  • あなたのウェブアプリはデスクトップアプリケーションに通知するウェブアプリを

あなたのウェブRSSフィードを公開することができ、アプリが、あなたのデスクトップアプリは10秒ごとにフィードをポーリングする必要があります。あなたはHTTPリクエストHEADを使用している場合、あなたは(便利のLast-Modifiedという名前の)最終修正日付で小さなパケットを取得します:

トラフィックが巨大である必要はありません。

1

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

デスクトップアプリケーションは、(複数のマシンのうちの1つで実行される)「パブリッシャー」サービスで自分自身を登録できます。このパブリッシャーサービスは、Webアプリケーションから何か変更されたという「通知」を受け取り、登録された加入者。

必要なサイト運営者の数は、ユーザー数とともに増加します。

編集:デスクトップアプリケーションがソケットでリッスンする必要があることを忘れてしまった。

関連する問題