1

Java とネットワークに関して興味深い質問があります。

学習目的のみの基本的なチャット プログラムを作成しています。今、私は以前にクライアントをサーバーに適切に接続し、テキストをやり取りしました。それはまったく問題ありません。しかし、私は問題に直面しています。

どこかのリモートサーバーにデータベースがあるとします。そのデータベースには、インスタント メッセージング プログラムのログイン情報、連絡先リスト情報などが含まれます。これは、クライアントが何かを行うときに、データベースに対してクエリを実行する必要があることを意味します。明らかに、クライアントに接続文字列を含めたり、データベースにアクセスしたりしてはならないことはわかっています。

私の質問は次のとおりです。複数の潜在的なクライアントとのチャットを目的としたクライアント/サーバー アーキテクチャを持つ最善の方法は何ですか?また、サーバー側でクエリを実行できるように、ネットワーク経由でデータを送信する方法もありますか?

簡単な答えかもしれませんが、何らかの理由で、同時にデータを送信する複数のソケット/サーバーソケットに頭を悩ませています。

ありがとう。

4

3 に答える 3

1

1 つの解決策は、技術的には http 要求ですが、tomcat をセットアップして Java サーブレットを使用することです。

サーバーを作成する必要があるようです。チャットはすべてサーバー上でできると思うので、p2p アーキテクチャではなく、ハブ スタイルのアーキテクチャです。そうすれば、サーバーはクライアントに代わってデータベースにアクセスできます。

これがあなたの質問に答えてくれることを願っています.ネットワークプログラミングに関しては、何百万もの異なるアプローチがあります:)

コメントによる XML メッセージの例:

<XML>
<msg_header type="chat"/>
<msg_body>
   hello world
</msg_body>
</XML>

<XML>
<msg_header type="query"/>
<msg_body>
   SELECT * FROM myTable
</msg_body>
</XML>

望まないのであれば、それほど複雑にする必要さえありません。または、HTTP のような広く使用されている標準 (ソケットを使用する TCP/IP を使用) を採用することもできます。そうすれば、Java に組み込まれている http プロセッサの 1 つを使用して仕事を完了することができます。それはあなた次第です :)

于 2012-08-20T15:08:18.533 に答える
0

私は少し前にあなたのように TCP 接続 (主にゲームやチャット アプリケーション) を使用していましたが、私の意見では、ゲームを除いて、あなたが求めているものにはあまり適していません。私は Web サービス ATM がとても好きです。これらは、TCP ではなく HTTP を介して通信し、GET、POST、および PUT メソッドを使用して、何をしようとしているのかを認識します。実行中の Java Web サービスを自分で作成して試すのは非常に簡単です。アプリケーションで XML または Json を使用してみてください。

ジャージ Web サービスに関する優れたチュートリアル: http://www.vogella.com/articles/REST/article.html#

後でそれを理解したら、通常と同じようにデータベース接続を Web サービスに簡単に結び付けることができます。

幸運を!

于 2012-08-20T15:11:17.640 に答える
0

ここで取ることができる複数のアプローチがあります。

  1. クライアントごとに専用のサーバー側スレッドを使用している場合、このスレッドは必要な DB クエリを実行します。クライアントは初期ログイン情報などを渡します。これらを検証した後、ハンドラー スレッドは、クライアントが必要とする連絡先リストやその他の情報を送り返すことができます。

  2. 別のアプローチは、専用スレッドを持たないことです。代わりに、クライアントが認証するときに、ある種のトークン オブジェクトを作成し、それをクライアントに渡します。クライアントがメッセージを送信するたびに、トークンも一緒に送信します。サーバー上のどのスレッドがメッセージとトークンを受信して​​も、トークンを検査するだけでクライアントを検証できます。

ここに正解はありません。さらに詳しく知りたい場合は、IRC や jabber などの一般的なチャット実装のアーキテクチャを確認することをお勧めします。

于 2012-08-20T15:11:48.843 に答える