私はapache mina 2.0.4に基づいてtcpサーバーを構築し、クライアントに書き戻す際にいくつか問題があります。Apache Mina - クライアントへの複数の小さな書き込み
私たちには一度に1つのメッセージしか扱えず、最大256バイトのバッファサイズを持ついくつかのtcpクライアントがあります。クライアントに2つ以上のメッセージ(< 256バイト)を送信すると、クライアントは2つ以上の分離されたメッセージではなく、1つまたは2つの大きなブロックに到達します。 sessionConfig.setTcpNoDelay(true/false);
を成功させようとしましたが、sessionConfig.setSendBufferSize(256);
も設定しようとしました。メッセージ応答エンコーダで
私はまた、出力をフラッシュしようとした:
int capacity = 256;
IoBuffer buffer = IoBuffer.allocate(capacity, false);
buffer.setAutoExpand(false);
buffer.setAutoShrink(true);
buffer.putShort(type);
buffer.putShort(length);
buffer.put(gmtpMsg.getMessage().getBytes());
buffer.flip();
out.write(buffer);
out.flush();
とメッセージを送信する責任のスレッドで、私は
for (Entry<Long, OutgoingMessage> outgoingMsg : outgoingMsgs.entrySet()) {
WriteFuture future = session.write(outgoingMsg.getValue());
future.awaitUninterruptibly();
}
を書き込まれるメッセージを待機してみました
これはすべて悲惨に失敗し、唯一の解決策はセッション書き込みの間にばかげた500msecの睡眠です。これはほとんど受け入れられません。 誰かが私が間違っているのを見ますか?