2016-03-26 15 views
-1

XMPPサーバーに精通している場合は、openfireを知っている必要があります。私はopenfireのJSONバージョンを書く予定です(imo xmlは古く、jsonはもっと速く、openfireはそのメイトのTigaseよりも遅いですが、どちらも問題があります)。しかし、私が立ち往生している唯一の部分は、クラスタリング(例えば、HazzelCastを使用)と連絡先がサーバーのインスタンスにメッセージを送信するが、ターゲットが別のインスタンスにある場合は、接続を共有する必要があります。パケットをターゲットに送信します。Javaサーバーでソケット接続セッションを共有する方法

私はopenfireソースを読み取ろうとしましたが、それはあまりにも複雑だったので、私はここに私の質問を共有することを決めた:

はどのようにのserveralクラスタ化されたサーバは、パケットを送信するために単一のTCP connetionを使用できますか?

ネットワークフレームワークでは、nettyを使用します。

答えて

1

TCP接続は、IP_ADDR + PORTの2つのペアを抽象化したもので、1つはサーバーに属し、もう1つはクライアントに属します(より正確には、エンドポイントに関連付けられたチャネルのペアです)。 この前提で、異なるIPアドレスを持つサーバー間でTCP接続を共有することはできません。

Java 9ではSO_REUSEPORTがサポートされ、同じペアのIP_ADDR + PORTを共有する複数のサーバーソケットを持つことができます。あなたが知っている限り、Nettyはすでにそれをあなたのためにしています。

+0

openfireと他のクラスタリングサーバはメッセージを送信するために共有キューを使用しますか? – Reza

+0

システムレベルで作業する場合は、適切なサーバーにリダイレクトしてパケットレベルでTCPヘッダーを充実させることもできます。ソリューションは大きく異なる可能性があります。しかし、Javaでは、JNIを実行しない限り、そのレベルで作業する機会はありませんが、その時点でCを実行しています。 –

+0

それぞれのユーザーは別のポートサーバー(マルチユーザーチャット用)。とりあえずありがとう – Reza

関連する問題