netty
ljz2016
这个作者很懒,什么都没留下…
展开
-
Netty面试题
1、Netty 的特点是什么?高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架。传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。可以通过 ChannelHandler 对通信框架进行灵活地扩展。2、什么是 Netty 的零拷贝?Netty 的接收和发送 ByteBuffer 采用 DIRECT BUFFERS,使用堆外直接内存进原创 2020-07-16 18:05:10 · 498 阅读 · 0 评论 -
LengthFieldBasedFrameDecoder使用
LengthFieldBasedFrameDecoder解码器,会读取byteBuf中的前几个字节,获取数据长度。作用是防止粘包。如果客户端也是netty,那么可以配合LengthFieldPrepender使用。LengthFieldPrepender会自动在原始数据前面加上数据长度。socketChannel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65535,0,2,0,2));第二个参数指定lengthFieldOffset原创 2020-06-30 20:25:33 · 3911 阅读 · 0 评论 -
DelimiterBasedFrameDecoder使用
DelimiterBasedFrameDecoder是一个分隔符解码器。可以同时接受多个分隔符,第一个参数是缓冲区大小,如果长度超过1024(可以指定),并且没有找到分隔符,则会抛异常。如果长度小于1024,并且没有找到分隔符,会缓存收到的消息,直到接收到分隔符,或者超出1024抛异常。ByteBuf delimiter = Unpooled.copiedBuffer("$_".getBytes()); ByteBuf delimiter0 =原创 2020-06-30 13:17:25 · 6894 阅读 · 0 评论 -
netty应用退出
netty程序,使用shutdownGracefully退出。退出前会把队列中的消息发送完,释放channel,多路复用器的去注册,清空定时器任务等。 public Future<?> shutdownGracefully(long quietPeriod, long timeout, TimeUnit unit) { EventExecutor[] var6 = this.children; int var7 = var6.length;原创 2020-05-28 18:19:49 · 414 阅读 · 0 评论 -
netty(八)--EmbeddedChannel单元测试
最佳实践要求你的测试不仅要能够证明你的实现是正确的,而且容易隔离那些因修改代码而突然出现的问题。这种类型的测试叫做单元测试。EmbeddedChannel是netty专门改进针对ChannelHandler的单元测试而提供的。核心方法:数据流:测试入站消息...原创 2018-09-29 16:38:16 · 1871 阅读 · 0 评论 -
netty(九)--编解码器
编码器用于将消息转换为适合于传输的格式,解码器则是将网络字节流转换回应用程序的消息格式。解码器将字节解码为消息–ByteToMessageDecoder和RelayingDecoder将消息解码为另一种消息–MessageToMessageDecoderByteToMessageDecoder方法描述decode(ChannelHandlerContext c...原创 2018-10-08 16:34:30 · 244 阅读 · 0 评论 -
netty(二)--Channel、 EventLoop 和 ChannelFuture;ChannelHandler和ChannelPipeline简述
netty解决了技术的和体系结构的领域的问题。首先,它的基于Java NIO的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。其次,netty也包含了一组设计模式,将应用程序逻辑从网络层解耦,简化了开发过程,同时也最大限度地提高了可测试性、模块化及代码的可重用性。Channel – SocketEventLoop – 控制流、多线程处理、并发ChannelFutu...原创 2018-09-21 14:49:42 · 1414 阅读 · 0 评论 -
netty(一)--一个简单的Netty使用例子
package cn.nn.t2;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFutureListener;import io.netty.channel.ChannelHandlerContext;import io.netty.chann...原创 2018-09-21 13:55:51 · 1217 阅读 · 0 评论 -
netty(七)--Bootstrap
引导一个应用程序是指对它进行配置,并使他运行起来的过程。服务器致力于使用一个父 Channel 来接受来自客户端的连接, 并创建子 Channel 以用于它们之间的通信;而客户端将最可能只需要一个单独的、 没有父 Channel 的 Channel 来用于所有的网络交互。bootstrap类的API名称描述Bootstrap group(EventLoopGrou...原创 2018-09-26 16:29:56 · 1275 阅读 · 0 评论 -
netty(六)--EventLoop和线程模型
线程模型指定操作系统、编程语言、框架或者应用程序的上下文管理的关键方面。开发人员需要理解与不同模型相关的权衡。Netty 的 EventLoop 是协同设计的一部分,它采用了两个基本的 API: 并发和网络编程。首先, io.netty.util.concurrent 包构建在 JDK 的 java.util.concurrent 包上,用来提供线程执行器。其次, io.netty.channe...原创 2018-09-26 14:30:37 · 433 阅读 · 0 评论 -
netty(五)--ChannelHandler和ChannelPipeline
Channel的生命周期状态状态描述ChannelUnregisteredchannel已被创建,但还未注册到EventLoopChannelRegisteredChannel已经被注册到了EventLoopChannelActiveChannel处于活跃状态(已经连接到远程节点),现在可以收发消息channelInactiveChannel没有连接...原创 2018-09-26 09:43:37 · 405 阅读 · 0 评论 -
netty(四)--ByteBuf
&nbsp;&nbsp;网络数据的基本单位是字节,JavaNIO提供了ByteBuffer作为它的字节容器,但是这个类过于复杂,所以netty使用ByteBuf解决了ByteBuffer的局限性,提供了更好的API。&nbsp;&nbsp;Netty的数据处理API通过两个组件暴露–abstract class ByteBuf和Interface ByteBufHolder。下面是ByteBu...原创 2018-09-25 16:23:40 · 214 阅读 · 0 评论 -
netty(三)--传输
传输 API 的核心是 interface Channel, 它被用于所有的 I/O 操作。如图所示, 每个 Channel 都将会被分配一个 ChannelPipeline 和 ChannelConfig。ChannelConfig 包含了该 Channel 的所有配置设置, 并且支持热更新。ChannelPipeline 持有所有将应用于入站和出站数据以及事件的 ChannelHand...原创 2018-09-25 14:22:15 · 138 阅读 · 0 评论 -
java线程模型
作者:多大的 链接:https://www.zhihu.com/question/24322387/answer/142210426 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比转载 2017-10-18 10:48:27 · 264 阅读 · 0 评论