netty
文章平均质量分 69
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
netty的粘包与半包问题
1. 粘包的原因1.1 应用层的问题接收方ByteBuffer设置太大(netty默认1024字节),导致将socket缓冲区中多个包放进了ByteBuffer中。1.2 TCP的问题接收方的滑动窗口足够大,而且来不及处理,导致接收方的socket缓冲区缓冲了多个报文,从而导致了粘包 Nagle算法:发送方会将小的报文合并在一起发送给接收方,会造成粘包。2. 半包的原因2.1 应用层的问题接收方ByteBuf设置过小,导致只能从socket缓冲区中读取半个数据包到ByteBuf中去原创 2021-11-09 15:50:30 · 176 阅读 · 0 评论 -
NIO之零拷贝
1. 传统IO1.1 工作原理File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile(file, "r");byte[] buf = new byte[(int)f.length()];file.read(buf);Socket socket = ...;socket.getOutputStream().write(buf);原创 2021-11-09 13:20:18 · 466 阅读 · 0 评论 -
NIO三大组件
1. Channel1.1 什么是Channelchannel类似于Stream,他是读写数据的双向通道。 可以从channel中将数据读入buffer,也可以将buffer的数据写入channel。(channel只与buffer打交道) 而之前的stream要么是输入,要么是输出,channel比stream更为底层。1.2 常见的ChannelFileChannel DatagramChannel SocketChannel ServerSocketChannel1.3 ch原创 2021-11-09 12:22:06 · 1416 阅读 · 0 评论