1

SSLソケットを使用し、サーバーに接続するさまざまなクライアントを識別するために証明書を使用するねじれたサーバーがあります。可能なIDごとに接続が1つしかない状態を強制したいと思います。私が考えることができる2つの方法は、接続されたIDを追跡し、同じIDによる2番目の接続を許可しないか、2番目の接続を許可して最初の接続をすぐに終了することです。私は後者をやろうとしていますが、いくつかの問題があります(最後に私の選択を説明します)

ファクトリ クラスに接続のリストを保存し、SSL ハンドシェイク後にクライアントの ID をそのリストと比較します。すでにそのリストにある場合は、それを呼び出そうとします.transport.abortConnection()。次に、データベースに新しい接続を記録するために行う通常のことを行います。ただし、への呼び出しは直接呼び出されabortConnection()ないようです。これは、クリーンアップを実行し、接続が失われたことを示すためにデータベースを呼び出す場所です。connectionLost()したがって、私のコードは、ID が接続されていることを記録しますが、後で呼び出しが行われconnectionLost()、その ID が切断されているように見えます。

最初の接続が切断の処理を完了するまで、着信する 2 番目の接続をブロックする方法はありますか?

選択の説明: 私がこれを行っている全体的な理由は、NAT の背後にかなり定期的に (1 ~ 3 日に 1 回) IP アドレスを変更しているように見えるクライアントがいるからです。接続しているデバイスは、接続が不自然に切断され、新しい IP に再接続しようとします。ただし、サーバーは切断について通知されず、通常は接続をタイムアウトする必要があります。ただし、サーバーが接続をタイムアウトする前に、クライアントが再接続に成功する場合があり、サーバーは同じクライアントによる 2 つの明らかな接続がある状態になります。したがって、通常、最初の接続は、私が本当に終了したい接続です。

4

1 に答える 1