我的发送消息可能大于默认的套接字缓冲区大小。因此,为了接收完整的消息,可能存在多个读取操作。当结束条件是
时n = socket.read(rbuf);
if(n==0) || (n==-1)
break;
部分消息的例外仍然存在。有什么好方法可以解决这个问题。感谢
我在一台机器上运行多个进程。每个进程都使用一个nio套接字。这是导致部分消息的可能因素吗?
答案 0 :(得分:3)
0是读取的有效返回值,不表示通道的结束。 -1表示通道的结束。因此,如果在返回0时结束读数,则会收到部分消息。
答案 1 :(得分:1)
我建议使用基于Java的NIO类构建的Netty,但是给我(在我看来)比Java JDK NIO类更多可用的API。
要解决您的问题,您需要使用ReplayingDecoder,Netty会一次又一次地调用您的流(ChannelBuffer)解码器,直到您有足够的数据来理解它。