我發送的消息可能大於默認的套接字緩衝區大小。因此可能會有幾個讀取操作來接收完整的消息。當結束條件是使用java nio的部分消息問題
n = socket.read(rbuf);
if(n==0) || (n==-1)
break;
部分消息的例外仍然存在。有什麼好辦法來解決這個問題。謝謝
我使用多個進程在一臺機器上運行。每個進程使用一個nio套接字。這是否可能導致部分消息?
我發送的消息可能大於默認的套接字緩衝區大小。因此可能會有幾個讀取操作來接收完整的消息。當結束條件是使用java nio的部分消息問題
n = socket.read(rbuf);
if(n==0) || (n==-1)
break;
部分消息的例外仍然存在。有什麼好辦法來解決這個問題。謝謝
我使用多個進程在一臺機器上運行。每個進程使用一個nio套接字。這是否可能導致部分消息?
0是一個有效的讀取返回值,它不表示通道結束。 -1表示通道的結束。所以如果你在返回0時結束閱讀,你會得到部分消息。
我建議使用Netty,它建立在Java的NIO類的基礎之上,但給你一個(在我看來)比Java JDK NIO類更可用的API。
爲了解決您的問題,您可以使用ReplayingDecoder,Netty會一次又一次地調用您的流(ChannelBuffer)解碼器,直到您有足夠的數據來理解它。
我通過首先緩衝消息來完成解決問題。完整的條件是符合結束字符。 – susan 2011-06-01 14:17:15