0

apache-mina フレームワークを使用したサーバー アプリケーションとクライアント アプリケーションがあります。サーバーからクライアントに大きな配列リスト (10000 個のカスタム オブジェクトを含む) を送信する必要があります。最初はGSON文字列を使ってarraylistを渡そうと思ったのですが、そういう巨大な文字列を作って送るのは適切な方法ではないと思います。

私のクライアントアプリでは、接続するメソッドを書きました:

public void connect() throws InterruptedException 
{

    Thread t = new Thread(new Runnable() 
    {
        @Override
        public void run() 
        {

            connector = new NioSocketConnector();
            connector.getSessionConfig().setReadBufferSize(1024);
            TextLineCodecFactory t = new TextLineCodecFactory(Charset.forName("UTF-8"));
            t.setEncoderMaxLineLength(100000);
            t.setDecoderMaxLineLength(100000);
            connector.getFilterChain().addLast("logger", new LoggingFilter());
            connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(t));

            connector.setHandler(handler);
            ConnectFuture future = connector.connect(new InetSocketAddress("localhost", PORT));
            future.awaitUninterruptibly();

            if (!future.isConnected()) 
            {
                return;
            }

            IoSession session = future.getSession();
            session.getConfig().setUseReadOperation(true);
            session.getCloseFuture().awaitUninterruptibly();

            connector.dispose();
        }
    });
    t.start();
    Thread.sleep(1000);
}

オブジェクトまたはコンテナーを文字列に変換せずに送信するには、どのフィルターを使用すればよいですか? それは BufferedWriteFilter または WriteRequestFilter についてですか? もしそうなら、どうすればそれらを使うことができますか?

4

1 に答える 1

1

私は答えを見つけました。

クライアント側とサーバー側の両方でObjectSerializationCodecFactoryを使用することで、カスタムオブジェクトとコレクションを渡すことができます。

  ObjectSerializationCodecFactory oscf = new ObjectSerializationCodecFactory();
  oscf.setDecoderMaxObjectSize(1048576);
  connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(oscf)
于 2012-12-06T11:56:07.973 に答える