2012-04-17 14 views
2

私は拡大しているChat Client Server Applicationを持っています。私は2つのチャットサーバー間のサーバー間通信を行う必要があります。Javaソケットを介したInterServer通信

問題がある:2台のサーバーがあるとし、AとBの今と仮定クライアント C1は、TCPサーバーAに接続されており、クライアントC2は、TCPそして、問題がある サーバーB に接続されている:同じappicationクライアントとしてC1とc2は、ログインしてオンラインで利用可能であることを互いに識別できるはずですが、 の通信がないために起こっていない です。

可能な解決法1は次のとおりです。サーバーAとサーバーBをTCP接続を使用して、それぞれ にログインします。ここでは、 メッセージ(文字列)とDataInputStreamを TCP接続を介して他のサーバーに転送できます。すべてのログインは他のサーバーに転送されるので、すべてのクライアントが各サーバーにアクセスできるように とクライアントC1は クライアントC2がログインしている(オンライン)か、その逆になります。

解決策1の問題点:クライアントC1は、クライアントC2がクライアントをオンラインで利用できると見なし、クライアントC1がクライアントC2にメッセージを送信するとします。 はどうなるのでしょうか?サーバAはクライアントのためにDatainputStreamに書き込もうとします C2サーバBでは確立されていてサーバAでは確立されていません。ここでは という問題が発生し、サーバAは送信できません。 クライアントC2へのメッセージ。

すべての入力をいただければ幸いです。

おかげ

+0

なぜ複数のマシンにスケールする必要がありますか?何人のユーザーについて話していますか?ノンブロッキングIOを既に使用しているのですか、または接続ごとに1つのスレッドしか使用していませんか?可能であれば、複数のマシンをスケーリングすることは避けてください。それは(ステートフルな)痛みの世界です。 –

+0

返信いただきありがとうございます。私のクライアントは、彼が彼のプロダクトにもっとぶつかるならば、スケールアップできるはずであることを確かめたいと思っています。私たちはベンチマークとその新製品以外のすべてについて議論しました。ヒット数を計算することができません。だから私は上記のようにサーバー間通信を実装する必要があります。製品は既に実装されています。これは、非ブロッキングソケットについて考えているconnection.amのスレッドを使用しています。これはすぐに起こります。 – Java

答えて

3

あなたはIRCサーバは機能のような種類を実装する方法の表情を取ることができます。具体的なユーザーを見つけるために、クライアントとしてサーバーを処理して要求する別のサーバーを作成する必要があると私は信じています。

http://tools.ietf.org/html/rfc2810

+1

re3ply @AlexTheoに感謝します。あなたの答えに役立つリンクを提案できますか? – Java

+0

実際にIRCサーバーは内部的に(サーバーサーバー)を実装しているので、ircの方法に従う必要がある場合は、内部的にサーバー用のサーバーを実装する必要があります。 http://tools.ietf.org/html/rfc2810 – AlexTheo

+0

それ以外の場合は、私の意見では、より柔軟な解決策である別のサーバー(サーバーサーバー)(別途)を実装します。 – AlexTheo

関連する問題