4

私が書いているのは、いくつかのC#Winformクライアントとデータベースへのデータの読み取り/書き込みを行うJavaサーバーアプリで構成される単純な会計プログラムです。要件の1つは、すべてのC#クライアントがサーバーから更新を受信する必要があることです。たとえば、ユーザーが自分のC#クライアントから新しい請求書を作成した場合、他のユーザーにはクライアントからのこの新しい請求書が表示されます。

私の経験は主にWeb開発であり、C#クライアントとJavaサーブレットサーバーでこの要件を満たすための最良の方法がわかりません。

私の最初は、GlassfishでActiveMQを実行し、メッセージングpub / subメソッドを使用して、更新をC#クライアントにプッシュできるようにすることです。メッセージタイプを区別するために、newInvoice、cancelInvoiceなどのさまざまなトピックを作成します。各メッセージには、JSONでエンコードされたオブジェクトが含まれているだけです。

しかし、これにはかなりの作業が必要だと私には思えます。私のユーザーベースが非常に小さい(3人または4人の同時ユーザー)ことを考えると、もっと簡単な解決策があるはずだと私には思えます。(私はソケットプログラミングに精通していません:))

私はこれがクライアントサーバープログラミング101の質問であることを知っていますが、経験豊富なプログラマーが私にいくつかの簡単な解決策を教えてくれるなら素晴らしいでしょう。

4

4 に答える 4

5

ここでの最も簡単なアプローチは、多くの場合、単純にポーリングを使用することです。つまり、クライアントに(時間間隔)ごとにデータを照会させることです。これにより、一連の問題(ファイアウォール、セキュリティ、視線、解決、クライアント追跡など)を回避できます。

WCFを使用すると、二重チャネルでコールバックを行うことができます(サーバーがクライアントにメッセージをアクティブに送信できるようにします)が、これはより複雑です。私はシンプルさを大切にしているので、通常はただポーリングします。

ここで役立つ秘訣は、「x以降の変更」をクエリするための組み込みメカニズムを備えたシステムを設計することです。たとえば、データベーストリガーによって供給される監査テーブルなどです。もちろん、正確な詳細はプロジェクトごとに異なります。

検討したいもう1つのオプションは、ADO.NETSyncServicesです。これは、データベースのローカルコピーをサーバーで最新の状態に保つために、あなたが求めることの多くを実行しますが、それ自体にいくつかの複雑さがあります。これは、「ローカルデータベースキャッシュ」VSテンプレートで使用できます(IIRC)。

于 2009-04-20T08:14:05.473 に答える
0

サーバーから1:Nクライアントに情報をプッシュするのではなく、クライアントにサーバーをポーリングして更新を頻繁に行わせる方が簡単ではないでしょうか。または、クライアントが起動してサーバーへの接続を作成すると、サーバーはそのクライアント接続の新しいメッセージキューを動的に生成し、クライアントはそれをポーリングして更新を確認できますか?

于 2009-04-20T08:12:02.763 に答える
0

ActiveMQ(あなたが言ったように)やXMPPのように、あなたが利用できるいくつかのプッシュテクノロジーがあります。ただし、気になるクライアントが3つか4つしかない場合は、ポーリングが最も簡単な解決策になります。それはうまく拡張できませんが、サーバーが8086か何かでない限り、それはあなたのケースでは実際には問題ではありません8-)

于 2009-04-20T13:35:03.253 に答える
0

StreamHubプッシュサーバーを確認することをお勧めします。これは、Javaで記述された人気のCometサーバーであり、C#でサーバーから更新を受信するための.NETクライアントSDKを備えています。また、JavaクライアントSDKと通常のAjax / Comet Webブラウザーのサポートにより、将来的にWeb、Java、およびC#クライアントにデータをプッシュするための柔軟性が向上します。

于 2009-09-25T21:59:04.747 に答える