Apache Mina - 多个小写入客户端

时间:2012-03-20 05:19:14

标签: java apache-mina

我构建了一个基于apache mina 2.0.4的tcp服务器,并且在写回客户端时遇到了一些问题。

我们有一些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毫秒睡眠,这是难以接受的。 有谁看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

在tcp协议和特别https://stackoverflow.com/a/6614586/1280034上阅读了更多内容后,很明显问题出在客户端,而不是正确处理数据包。

由于我们无法重建客户端,我唯一的解决方案是将每个外发消息延迟大约500毫秒。为此,我创建了一个额外的队列,负责向客户端写入文件,以便让服务器继续正常工作。