gpt4 book ai didi

java - Apache Mina - 对客户端的多个小写入

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:39 25 4
gpt4 key购买 nike

我基于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();
}

所有这些都惨遭失败,唯一有效的解决方案是 session 写入之间荒谬的 500 毫秒 sleep ,这是难以接受的。有人看到我做错了什么吗?

最佳答案

在阅读了更多关于 tcp 协议(protocol)的内容之后,特别是 https://stackoverflow.com/a/6614586/1280034 ,很明显问题出在客户端,没有正确处理数据包。

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

关于java - Apache Mina - 对客户端的多个小写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com