自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 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 529

原创 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 430

原创 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 670

原创 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 416

原创 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 468 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 267 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 1401 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 203

原创 Netty学习13-编写网络应用程序的基本步骤

学习第29节编写网络应用程序基本步骤1、需求分析2、定义业务数据的静态数据结构3、实现业务逻辑即动态数据结构4、选择传输协议:UDP还是TCP,或者HTTP5、设计传输信息结构,包含编解码如JSON、XML,并考虑传输效率压缩等问题6、实现编解码7、编写应用程序,编写服务端和客户端8、测试,以及针对测试结果进行有效的改进注:内容参考极客时间相关课程...

2020-12-09 13:43:46 426

原创 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 1718

原创 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 353

原创 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 218

原创 Netty学习09- Netty接收数据过程剖析

学习第24节Netty接收数据的技巧:1 自适应数据大小的分配器(AdaptiveRecvByteBufAllocator):发放东西时,拿的桶小了不够,大了浪费,所以会自己根据实际装的情况猜一猜下次情况,从而决定下次带多大的桶。2 连续读(defaultMaxMessagesPerRead):发放东西时,假设拿的桶装满了,这个时候,你会觉得可能还有东西发放,所以直接拿个新桶等着装,而不是回家,直到后面出现没有装上的情况或者装了很多次需要给别人一点机会等原因才停止,回家。Netty接收数据的主线

2020-11-17 21:45:19 487

原创 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 346

原创 Netty学习07- Netty服务启动过程剖析

学习第22节注:内容参考极客时间相关课程

2020-11-04 19:45:18 209

原创 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 1685

原创 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 371

原创 Netty学习04-Netty对常用编解码的支持和keepalive与idle的处理

注:学习第14-17节二次解码器在项目中,除了可选的的压缩解压缩之外,还需要一层解码,因为一次解码的结果是字节,需要和项目中所使用的对象做转化,方便使用,这层解码器可以称为“二次解码器”,相应的,对应的编码器是为了将 Java 对象转化成字节流方便存储或传输。Google ProtobufNetty 对二次编解码的支持...

2020-10-13 21:41:18 211

原创 Netty学习03-Netty对粘包、半包的处理

学习第12-15节

2020-10-12 09:11:36 209

原创 Netty学习02-Netty三种I/O切换和Netty对I/O模式的支持

Netty三种I/O切换及对I/O模式的支持

2020-09-28 21:20:45 185

原创 PLSQL官方下载、安装和使用完全指南

1、 PLSQL介绍我们常说的plsql指的是plsqldeveloper 这个oracle数据库客户端连接工具,这个工具以其方便和强大被广大开发者喜爱。这个工具是由allroundautomations公司开发,他的官网是https://www.allroundautomations.com/ 。2、 PLSQL下载由于plsql是商业软件,所以网上充斥着各种第三方下载地址。真正的官方下载地址是 https://www.allroundautomations.com/在官网可以看到最新版本是:1

2020-09-18 22:21:59 130247 23

原创 Netty学习01-Netty及优势

Netty目前在github上有2万+的Star。目前最新版本是Netty4,虽然有Netty5,但是Netty5是昙花一现的版本,官方已经放弃了这个版本,需要使用Netty时应该选择Netty4。目前有许多知名项目使用Netty,如下是一些典型项目:Netty最新版本是4.1.39234...

2020-09-12 15:14:28 330

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除