私は拡大している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へのメッセージ。
すべての入力をいただければ幸いです。
おかげ
なぜ複数のマシンにスケールする必要がありますか?何人のユーザーについて話していますか?ノンブロッキングIOを既に使用しているのですか、または接続ごとに1つのスレッドしか使用していませんか?可能であれば、複数のマシンをスケーリングすることは避けてください。それは(ステートフルな)痛みの世界です。 –
返信いただきありがとうございます。私のクライアントは、彼が彼のプロダクトにもっとぶつかるならば、スケールアップできるはずであることを確かめたいと思っています。私たちはベンチマークとその新製品以外のすべてについて議論しました。ヒット数を計算することができません。だから私は上記のようにサーバー間通信を実装する必要があります。製品は既に実装されています。これは、非ブロッキングソケットについて考えているconnection.amのスレッドを使用しています。これはすぐに起こります。 – Java