我构建了一个基于apache mina 2.0.4的tcp服务器,并在写回客户端时遇到了一些问题。Apache Mina - 多次写入客户端
我们有一些tcp客户端,一次只能处理一条消息,最大缓冲区大小为256字节。当我向客户端发送2+邮件(< 256字节)时,它们会到达一个或两个客户端无法处理的大块,而不是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();
}
所有这些都失败了,唯一的解决方案是在会话写入之间进行一次荒谬的500毫秒睡眠,这是难以接受的。 有人看到我做错了什么?