在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Python/ 使用netty通信會(huì)把兩個(gè)間隔很短的數(shù)據(jù)幀合并成一個(gè)數(shù)據(jù)幀?

使用netty通信會(huì)把兩個(gè)間隔很短的數(shù)據(jù)幀合并成一個(gè)數(shù)據(jù)幀?

比如我用netty寫服務(wù)端, 用簡單的Socket來模擬客戶端,像這樣來向服務(wù)端發(fā)數(shù)據(jù):

bos.write(data);
bos.flush();

這樣就存在一個(gè)問題, 當(dāng)客戶端兩次發(fā)送數(shù)據(jù)的時(shí)間間隔很短時(shí), netty的channelRead(ChannelHandlerContext ctx, Object msg)方法獲取到的msg里就可能會(huì)同時(shí)含有客戶端的兩次數(shù)據(jù), 這樣服務(wù)端在解析數(shù)據(jù)時(shí)就會(huì)出現(xiàn)問題. 想知道為什么會(huì)出現(xiàn)合并數(shù)據(jù)幀的問題, 以及該怎樣去解決?

回答
編輯回答
初心

channel本來就是非阻塞的,所以獲取到的并不是完全實(shí)時(shí)的數(shù)據(jù),可能會(huì)有延遲,所以兩次發(fā)送的數(shù)據(jù)服務(wù)端一次接收本身就是正常的。

關(guān)鍵的是,你不應(yīng)該以“幀”來分隔數(shù)據(jù),而應(yīng)該自己約定一種分割方法。比如每一個(gè)數(shù)據(jù)都附帶一個(gè)length,或者以若干個(gè)特殊的字節(jié)來作為分隔符,等。

2018年4月20日 15:28