Я создал tcp-сервер на основе apache mina 2.0.4, и у меня возникли некоторые проблемы с обратной записью на клиент.
У нас есть несколько tcp-клиентов, которые могут обрабатывать только одно сообщение за раз и с размером буфера не более 256 байт. Когда я отправляю 2+ сообщения (<256 байт) клиенту, они приходят в один или два больших блока, которые клиент не может обработать, вместо 2+ отдельных сообщений.
Я попытался установить <code>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();
}
Все это с треском проваливается, и единственное работающее решение - это нелепый 500-миллисекундный сон между записью сеанса, что вряд ли приемлемо.
Кто-нибудь видит, что я делаю не так?