笔记
文章平均质量分 51
Pasto
这个作者很懒,什么都没留下…
展开
-
Spring Framework的特性及模块
核心特性(Core)• IoC 容器(IoC Container)• Spring 事件(Events)• 资源管理(Resources)• 国际化(i18n)• 校验(Validation)• 数据绑定(Data Binding)• 类型装换(Type Conversion)• Spring 表达式(Spring Express Language)• 面向切面编程(AOP...原创 2021-02-04 18:23:35 · 543 阅读 · 0 评论 -
Netty学习20-Netty线程模型优化和写优化
学习第44节CPU 密集型,使用线程模型:• Runtime.getRuntime().availableProcessors() * 2• io.netty.availableProcessors * 2• io.netty.eventLoopThreadsIO 密集型使用线程模型:• 独立出 “线程池”来处理业务• 在 handler 内部使用 JDK Executors• 添加 handler 时,指定1个:EventExecutorGroup eventExecutorGroup原创 2021-01-27 20:01:15 · 445 阅读 · 0 评论 -
Netty学习19-使用Netty的注解
学习第43节Netty的注解有:• @Sharable• @Skip• @UnstableApi• @SuppressJava6Requirement• @SuppressForbidden每个注解的作用如下:@Sharable: 标识 handler 提醒可共享,不标记共享的不能重复加入 pipeline@Skip: 跳过 handler 的执行@UnstableApi:提醒不稳定,慎用@SuppressJava6Requirement:去除“Java6需求”的报警 https://原创 2021-01-21 13:12:56 · 686 阅读 · 0 评论 -
Netty学习18-防止Netty内存泄漏
学习第42节Netty 内存泄漏的现象:• 原因:“忘记”releaseByteBuf buffer = ctx.alloc().buffer();buffer.release() / ReferenceCountUtil.release(buffer)• 后果:资源未释放 -> OOM• 堆外:未 free(PlatformDependent.freeDirectBuffer(buffer));• 池化:未归还 (recyclerHandle.recycle(this))Netty原创 2021-01-12 20:25:00 · 437 阅读 · 0 评论 -
Netty学习17-Netty的可视化
学习第41节Netty 可视化方案:• Console 日志定时输出• JMX 实时展示• ELKK、TIG、etc@ChannelHandler.Sharablepublic class MetricsHandler extends ChannelDuplexHandler { private AtomicLong totalConnectionNumber = new AtomicLong(); { MetricRegistry metricRegi原创 2021-01-05 13:43:34 · 484 阅读 · 1 评论 -
Netty学习16-如何让Netty应用容易进行问题定位和排查
学习第40节从以下3个方面使Netty应用更容易进行问题定位和排查:• 完善“线程名”• 完善 “Handler ”名称• 使用好 Netty 的日志1、完善“线程名”2、完善 “Handler 名称”3、使用好Netty日志Netty 日志的原理及使用• Netty 日志框架原理• 修改 JDK logger 级别• 使用 slf4j + log4j 示例• 衡量好 logging handler 的位置和级别注:内容参考极客时间相关课程...原创 2020-12-29 12:52:48 · 280 阅读 · 1 评论 -
Netty学习15-Netty核心参数的调优
学习第38、39节参数调整要点:• option/childOption 傻傻分不清:不会报错,但是会不生效;• 不懂不要动,避免过早优化。• 可配置(动态配置更好)• 需要调整的参数:• 最大打开文件数• TCP_NODELAY SO_BACKLOG SO_REUSEADDRChannelOption• childOption(ChannelOption.[XXX], [YYY])• option(ChannelOption.[XXX], [YYY])• System propert原创 2020-12-22 12:33:46 · 1415 阅读 · 1 评论 -
Netty学习14-Netty中的System参数的调整
学习第37节• Linux 系统参数例如:/proc/sys/net/ipv4/tcp_keepalive_time• Netty 支持的系统参数:例如:serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);• SocketChannel -> .childOption• ServerSocketChannel -> .optionNetty 支持的系统参数 (ChannelOption.[XXX] ) 讨论:• 不考虑原创 2020-12-18 19:21:52 · 211 阅读 · 0 评论 -
Netty学习13-编写网络应用程序的基本步骤
学习第29节编写网络应用程序基本步骤1、需求分析2、定义业务数据的静态数据结构3、实现业务逻辑即动态数据结构4、选择传输协议:UDP还是TCP,或者HTTP5、设计传输信息结构,包含编解码如JSON、XML,并考虑传输效率压缩等问题6、实现编解码7、编写应用程序,编写服务端和客户端8、测试,以及针对测试结果进行有效的改进注:内容参考极客时间相关课程...原创 2020-12-09 13:43:46 · 434 阅读 · 0 评论 -
Netty学习12- Netty断开连接和关闭服务过程剖析
学习第27和28节Netty断开连接过程主流程:Netty关闭连接本质:1 java.nio.channels.spi.AbstractInterruptibleChannel#close2 java.nio.channels.SelectionKey#cancelNetty关闭连接的关键点:1 关闭连接,会触发 OP_READ 方法。读取字节数是 -1 代表关闭。2 数据读取进行时,强行关闭,触发 IO Exception,进而执行关闭。3 Channel 的关闭包含了 Selectio原创 2020-11-30 21:03:43 · 1748 阅读 · 0 评论 -
Netty学习11- Netty发送数据过程剖析
学习第26节Netty写数据的三种方式Netty写数据的要点:1 Netty 写数据,写不进去时,会停止写,然后注册一个 OP_WRITE事件,来通知什么时候可以写进去了再写。2 Netty 批量写数据时,如果想写的都写进去了,接下来的尝试写更多(调整maxBytesPerGatheringWrite)。3 Netty 只要有数据要写,且能写的出去,则一直尝试,直到写不出去或者满 16 次(writeSpinCount)。4 Netty 待写数据太多,超过一定的水位线(writeBufferW原创 2020-11-27 14:06:18 · 372 阅读 · 0 评论 -
Netty学习10- Netty业务处理过程剖析
学习第25节业务处理的主线:多路复用器( Selector )接收到 OP_READ 事件• 处理 OP_READ 事件:NioSocketChannel.NioSocketChannelUnsafe.read()• 分配一个初始 1024 字节的 byte buffer 来接受数据• 从 Channel 接受数据到 byte buffer• 记录实际接受数据大小,调整下次分配 byte buffer 大小• 触发 pipeline.fireChannelRead(byteBuf) 把读取到的原创 2020-11-24 12:54:04 · 229 阅读 · 0 评论 -
Netty学习09- Netty接收数据过程剖析
学习第24节Netty接收数据的技巧:1 自适应数据大小的分配器(AdaptiveRecvByteBufAllocator):发放东西时,拿的桶小了不够,大了浪费,所以会自己根据实际装的情况猜一猜下次情况,从而决定下次带多大的桶。2 连续读(defaultMaxMessagesPerRead):发放东西时,假设拿的桶装满了,这个时候,你会觉得可能还有东西发放,所以直接拿个新桶等着装,而不是回家,直到后面出现没有装上的情况或者装了很多次需要给别人一点机会等原因才停止,回家。Netty接收数据的主线原创 2020-11-17 21:45:19 · 510 阅读 · 0 评论 -
Netty学习08- Netty构建连接过程剖析
学习第23节Netty启动起来后的最后一件事情,也是最重要的事情,就是注册一个OP_ACCETP事件,等待连接的创建。构建连接的主线过程如下:使用以上两个线程创建连接。接受连接本质:selector.select()/selectNow()/select(timeoutMillis) 发现 OP_ACCEPT 事件,处理:SocketChannel socketChannel = serverSocketChannel.accept()selectionKey = javaChannel()原创 2020-11-09 19:55:54 · 359 阅读 · 0 评论 -
Netty学习07- Netty服务启动过程剖析
学习第22节注:内容参考极客时间相关课程原创 2020-11-04 19:45:18 · 218 阅读 · 0 评论 -
Netty学习06- Netty代码编译常见问题及Netty核心包
学习第21节Could not find artifact io.netty:netty-tcnative:jar:windows-x86_32:2.0.25.Final in central 如下图,需要首先将pom中的tcnative.classifier修改为windows-x86_64,由于Netty中tcnative.classifier需要为windows-x86_64版本,需要我们的操作系统是64位,jdk也是64位的,开发代码的ide也必须是64位。当报一些包找不到,如下图,如报io.原创 2020-10-30 23:09:04 · 1709 阅读 · 0 评论 -
Netty学习05- Netty对锁的使用优化和对内存的使用优化
学习第18-20节同步问题的核心三要素:原子性、可见性、有序性锁的分类:乐观锁(java.util.concurrent 包中的原子类)与悲观锁(Synchronized)公平锁 new ReentrantLock (true)与非公平锁 new ReentrantLock ()共享锁与独享锁:ReadWriteLock ,其读锁是共享锁,其写锁是独享锁Netty从以下几个方面优化锁的使用:Netty减少锁的对象和范围,减少锁的粒度(比如把Synchronized加到代码块而不是方法上)。N原创 2020-10-22 20:01:27 · 382 阅读 · 0 评论 -
Netty学习04-Netty对常用编解码的支持和keepalive与idle的处理
注:学习第14-17节二次解码器在项目中,除了可选的的压缩解压缩之外,还需要一层解码,因为一次解码的结果是字节,需要和项目中所使用的对象做转化,方便使用,这层解码器可以称为“二次解码器”,相应的,对应的编码器是为了将 Java 对象转化成字节流方便存储或传输。Google ProtobufNetty 对二次编解码的支持...原创 2020-10-13 21:41:18 · 219 阅读 · 0 评论 -
Netty学习03-Netty对粘包、半包的处理
学习第12-15节原创 2020-10-12 09:11:36 · 216 阅读 · 0 评论 -
Netty学习02-Netty三种I/O切换和Netty对I/O模式的支持
Netty三种I/O切换及对I/O模式的支持原创 2020-09-28 21:20:45 · 196 阅读 · 0 评论 -
Netty学习01-Netty及优势
Netty目前在github上有2万+的Star。目前最新版本是Netty4,虽然有Netty5,但是Netty5是昙花一现的版本,官方已经放弃了这个版本,需要使用Netty时应该选择Netty4。目前有许多知名项目使用Netty,如下是一些典型项目:Netty最新版本是4.1.39234...原创 2020-09-12 15:14:28 · 341 阅读 · 0 评论