5
回答
netty - TCP - 分包问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

netty在发送的时候能够确定本次发送的内容是否分包?

对方不是用的netty,但是协议时基于TCP的,其中规定,每个包中需要指定是否有后续包。

但是我用netty发送的时候我不知道本次write的内容是否会分包。

网上查了TCP一个包大概会有1400多个字节,但是我用netty测试,貌似还远远不到这个数量就已经分包(会receive 多次 Message)了。

请问这个问题有什么解决办法吗?

举报
CCC_ccc
发帖于5年前 5回/1K+阅
共有5个答案 最后回答: 2年前
分包不是业务层该考虑的,业务层只注意到可靠的字节流传输即可。 由于双方TCP参数的区别和业务层Buffer的大小区别,发送方发了一个TCP包,对方可能需要receive多次,这不能作为协议的依据。 协议的规划是依据字节流来确定,而不是分包!

引用来自“tsingxu”的答案

分包不是业务层该考虑的,业务层只注意到可靠的字节流传输即可。 由于双方TCP参数的区别和业务层Buffer的大小区别,发送方发了一个TCP包,对方可能需要receive多次,这不能作为协议的依据。 协议的规划是依据字节流来确定,而不是分包!

但是协议中有一个是否有后续包的标识字节位。这个协议是早就定好的。

引用来自“CCC_ccc”的答案

引用来自“tsingxu”的答案

分包不是业务层该考虑的,业务层只注意到可靠的字节流传输即可。 由于双方TCP参数的区别和业务层Buffer的大小区别,发送方发了一个TCP包,对方可能需要receive多次,这不能作为协议的依据。 协议的规划是依据字节流来确定,而不是分包!

但是协议中有一个是否有后续包的标识字节位。这个协议是早就定好的。

那就在接收方中判断需要的字节是否已经全部传输完毕,是则没有后续包。
NIO+Netty5各种RPC架构实战演练视频教程
课程观看地址:http://www.xuetuwuyou.com/course/52


课程目录:
第1课、nio简单介绍 
第2课、Nio基本组件ByteBuffer 
第3课、ServerSocket 
第4课、selector与serversocketchannel的使用 
第5课、SocketChannelSelector 
第6课、aio编程 
第7课、netty服务器的快速实现 
第8课、netty客户端架构实现 
第9课、netty客户端模拟高并发以及netty5线程模型 
第10课、netty的编码解码 
第11课、protobuf简单讲解 
第12课、protobuf与netty整合 
第13课、netty与protobuf架构1 
第14课、netty与protobuf架构2 
第15课、netty http通信与spring整合架构1 
第16课、netty http通信与spring整合架构2 
第17课、netty websocket聊天室1 
第18课、netty websocket聊天室2 
第19课、Thrift讲解 
第20课、thrift与netty整合 
第21课、thrift与netty整合2 
第22课、thrift rpc架构1 
第23课、thrift rpc架构2 
第24课、netty的http与socket 
第25课、各种架构整合2以及nety源码分析 
第26课、课程总结
顶部