繁体   English   中英

非阻塞Java套接字客户端上的错误读取

[英]Erroneous reading on Non-blocking java socket client

我有一个使用非阻塞IO用Java编写的客户端/服务器应用程序。
有几种消息类型以Json编码的形式传输,并在每个消息的末尾附加了一个消息定界符。
客户端读取字节并合并成块的消息。 在正常情况下,它可以正常工作,但在繁重的情况下,我会得到一个包含不正确顺序的消息的块。 我的意思是,假设我有一条消息m1 =“ AAABBBCCCDDD”和m2 =“ EEEFFF”,分隔符为“ ||”。 收到消息后,它应该是“ AAABBBCCCDDD || EEEFFF ||”。 但是接收到“ AAABBBEEEFFF || CCCDDD ||”。 结果,它无法解析消息。
实际上,我想听听使用无阻塞IO开发网络应用程序时应考虑的想法。 顺序错误的原因是什么? 读者代码是这样的:

ByteBuffer buffer = ByteBuffer.allocate(20000);
count = 0;
while ((count = channel.read(buffer)) > 0) {
    buffer.flip();
    processSocketData(Charset.defaultCharset().decode(buffer));
}

processSocketData()方法类似于:

socketData.append(newData);
delIndex = socketData.indexOf(cGlobals.delimiterSequence);

if (delIndex > -1) {
    processRawMessage(socketData.substring(0, delIndex));
    socketData.delete(0, delIndex + cGlobals.delimiterSize);
}

在处理之前,您需要先进行flip()在处理完缓冲区之后,还需要compact()clear()缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM