2011-01-30 1 views
2

私たちはいくつかのデータがあり、例えば株価などの問題を抱えており、価格が大幅に変化したときにクライアントに通知するサービスを提供したいと考えています。相互運用可能な「プッシュ」ベースのWebサービスを作成するにはどうすればいいですか?

このサービスは、プラットフォームの境界を超えて、できるだけ多くのクライアントと相互運用可能である必要があります。したがって、標準に基づいた方法は良い方法のようです。

私たちのサービスをポーリングするようにクライアントに依頼することは狂っているように見え、私たちのサーバーをすばやく圧倒するためのレシピです。

興味深いイベントをクライアントに通知するために、pub-subまたはイベントベースの方法を行う標準ベースの方法はありますか?

WS-Eventingがありますが、それは広いフレームワークのサポートがないように感じます。

+0

どのプラットフォームですか? 。ネット? Java? –

+0

私たちは.NETですが、さまざまなプラットフォームでクライアントに公開したいと考えています。 – saille

+0

クライアントの種類。あなたは顧客のPCにインストールすることができますWebベースまたはプログラムですか?どちらも ? – keatch

答えて

2

これを達成するために、XMPPを使用するという考えを出したいと思います。 XMPP(以前のJabber)はIETF標準であり、拡張可能なXMLベースのプロトコルを使用してプッシュベースのインスタントメッセージングを達成するために電子メールのように動作します。また、チャネル暗号化用のTLSと認証用のSASLも提供します。 XMPPはGoogleトークの基礎でもあります。 Jabberなどのオープンソースソフトウェアを使用してXMPPサーバーを実行することは可能で、おそらくGoogleのTalkインフラストラクチャを使用してメッセージを中継することが可能です。

XMPP librariesには、クライアントとサーバーの開発を簡略化するためのものがあります。

1

サービスホストとクライアントの一般的な役割を逆にすることができます。クライアントにWSDL契約を提供し、その契約に準拠した基本プロファイルWebサービスをホストする必要があります。シンプルなWebサービスメソッドがあります。これは、クライアントの役割ではなく、サービスのプロバイダが、顧客に興味深いイベントを通知するために呼び出す方法です。

+0

良いアプローチと私が以前使用したアプローチ。問題の1つは、クライアントが直接到達可能なIPアドレスを持つ必要があることです(NATは機能しますが、より多くの設定が必要です)。要件に応じて、ブラウザ、モバイル、および埋め込みアプリケーションは一般的に除外されている可能性があります。ブラウザはリッスンポートを設定することはできず、組み込み/モバイルデバイスは一般に直接アドレス可能なIPを持たず、NATを設定する能力はほとんどない。 –

2

チェックアウト彗星、Ajaxのプッシュなど:http://en.wikipedia.org/wiki/Comet_(programming))

JavaScriptに固有のだが、非同期クライアントのいずれかのタイプでうまく動作することができます

。クライアントはサーバーを "ポーリング"します。その後、サーバーはデータがあるまで接続を保持します。プロセスはそれから繰り返されます。ただし、クライアントのタイムアウトを考慮する必要があります。

クライアントが独自のサービスを実装することなく、これはプッシュメカニズムに最も近いものです。これらのオープンな接続をすべて維持するか、またはクライアントが真のポーリングを行うためにコストがかかるかどうかはわかりません。一般的には、各投票の間隔が長くなればなるほど、より良い伝統的な投票が実行されると言います。サーバーで余分な接続を処理できる場合でも、通知の待ち時間ははるかに短くなります。

+0

@saille:あなたはさまざまなクライアントを持っているので、それぞれのメソッドは 'maxWait'パラメータを取るべきです。 'maxWait'が期限切れになる前にサーバは常に戻り、クライアントのタイムアウトを防ぎます。クライアントは最適なものを決定することができます。私はネットワークの待ち時間などのためにいくつかそれを埋めるだろう。 –

+0

ありがとう、素敵な答え。あなたは、サービスの消費者がサーバーになる可能性が高い場合、これがB2B環境での良い解決策だと思いますか?また、サービスを利用している開発者の多くに尋ねていますか?最も低い共通分母を考えるようになった。 – saille

+0

@saille:私はこのシナリオでこれを使ったことは一度もありませんが、正直言っても問題はないとは思いません。クライアントの観点からは、他の要求と同じように動作しますが、余分な「遅れ」があります。私はあなたの懸念を理解していますが、余分な整数を渡すことは開発者にとっては複雑すぎるとは思いません。そうであれば、単純なバージョンのメソッドを提供することができます。単純なバージョンでは、整数を取らずすぐに戻りますが、ポーリングに戻ります。 –

関連する問題