0

サーバーとの間でデータを送受信するチャット プログラムがあるとします。クライアント接続をシングルトンにするのは賢明でしょうか? または、これによりデータストリームが台無しになります。

クライアントシングルトンの私の例:

public class Client {
    private static Client client;
    private final int portNumber = 7070;
    private Socket socket;
    private Client(){
        connect();

    }
    public static synchronized Client getClient(){
        if (client == null) {
            client = new Client();
        }
        return client;
    }

    public void connect(){

        try {
            InetAddress adr = InetAddress.getByName("localhost");
            socket = new Socket(adr, portNumber);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
4

2 に答える 2

2

コードには 2 つの問題があります。

  • シングルトンは非常に柔軟性がありません。将来、負荷分散や接続プーリングを実装したい場合、あなたの手は縛られています. 1 つの接続のみが許可されます。そして、再接続はどうですか?古い接続をどのように取り除き、新しい接続を作成しますか?

  • コンストラクター内での接続 (または副作用のある操作) はお勧めできません。このクラスの単体テストを想像してみてください

したがって、シングルトン接続オブジェクトはお勧めしません。代わりに、メソッドを持つClientConnectionsマネージャー クラスを用意しClient connect()ます。このマネージャー クラスは、開いているすべての接続を追跡し、それらをキャッシュし、使用していない接続を閉じ、定期的にテストすることができますClientConnections。シングルトンのより良い候補です。

于 2012-11-15T20:23:09.683 に答える
1

クライアントごとに複数の接続が必要ない場合は、シングルトン クライアントを使用するのが理にかなっています。複数のファイルの同時送信をサポートしたい場合を除き、ほとんどの場合、これで問題ありません。

于 2012-11-15T20:21:58.973 に答える