第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

netty拆包、粘包的問題:服務(wù)端接收tcp請求的時候,為什么需要數(shù)據(jù)拼裝?或者是接收什么樣的數(shù)據(jù)需要數(shù)據(jù)拼裝?

netty拆包、粘包的問題:服務(wù)端接收tcp請求的時候,為什么需要數(shù)據(jù)拼裝?或者是接收什么樣的數(shù)據(jù)需要數(shù)據(jù)拼裝?

至尊寶的傳說 2019-01-18 00:43:46
netty官網(wǎng)的user-guide里的demo,有一個小節(jié)的內(nèi)容弄的不是特別明白。原文:netty4.x用戶指南中文:netty4.x用戶指南文章里說的,客戶端發(fā)過來的數(shù)據(jù)包,服務(wù)端是以流的形式接收的,因此需要有一個處理邏輯,來將接收到的流解析成客戶端發(fā)送來的真正的一個個的數(shù)據(jù)包。 但是我在自己的demo里,感覺不到這樣做的必要額?因為客戶端每發(fā)過來一段字符串,服務(wù)端都能通過 String recMsg = byteBuf.toString(CharsetUtil.UTF_8); 完整地解析出來,并沒覺得有必要進行文中所說的操作。 @Slf4j public class EchoHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf buf = (ByteBuf) msg; String msgStr = buf.toString(CharsetUtil.UTF_8); log.info("receive message: {}", msgStr); ChannelFuture f = ctx.write(buf); f.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { assert f == future; ctx.close(); } }); } } 是我哪里理解的有偏差嗎?比如說,客戶端寫過來的數(shù)據(jù)并不只有字符串,里面還夾雜著其他類型的數(shù)據(jù)比如一個long類型? ByteBuf time = ctx.alloc().buffer(4); // ChannelHandlerContext ctx String dateNow = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); long curTime = System.currentTimeMillis(); time.writeBytes(dateNow.getBytes()); time.writeLong(curTime); ctx.writeAndFlush(time); 如果客戶端像這一行寫數(shù)據(jù),服務(wù)器單一按照string類型來解析的話,的確是會亂碼。但現(xiàn)實真的會有這種情況存在嗎?有大佬給兩個具體一點的例子么?
查看完整描述

2 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

其實這就是一個典型的粘包、拆包的問題。

導致的原因就是因為 TCP 是流式的,就像水流一樣沒法知道一段完整的報文到哪里是截止的。

報文越長就越可能出現(xiàn)這樣的問題。

文中提到的其實是按照字節(jié)長度來防止拆包,常見的還有通過分隔符,比如知道讀取到指定的分隔符才算做是獲取到了完整的報文。

這些其實 Netty 都是有內(nèi)置的處理器。

查看完整回答
反對 回復 2019-02-12
?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

發(fā)數(shù)據(jù)的時候for循環(huán)多發(fā)幾次數(shù)據(jù),就可以看出粘包效果了。

查看完整回答
反對 回復 2019-02-12
  • 2 回答
  • 0 關(guān)注
  • 419 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號