我基于 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 毫秒睡眠,这是难以接受的。有人看到我做错了吗?