Netty
文章平均质量分 78
征服.刘华强
这个作者很懒,什么都没留下…
展开
-
Netty源码分析-HttpObjectEncoder
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance...原创 2020-04-28 11:19:56 · 862 阅读 · 0 评论 -
Netty源码分析-HttpObjectDecoder
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance *...原创 2020-04-27 16:36:44 · 1736 阅读 · 0 评论 -
Netty源码分析-ChunkedFile和ChunkedWriteHandler
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance *...原创 2020-04-24 22:19:36 · 5170 阅读 · 1 评论 -
Netty源码分析-NioEventLoop
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance *...原创 2020-04-22 15:39:18 · 635 阅读 · 1 评论 -
Netty源码分析-SingleThreadEventExecutor
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance *...原创 2020-04-21 15:20:22 · 957 阅读 · 0 评论 -
Netty源码分析-Bootstrap客户端连接过程
Netty源码分析-Bootstrap客户端连接过程下面是客户端连接模板代码 public static void main(String[] args) throws Exception { EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bootstr...原创 2020-04-13 16:53:08 · 1111 阅读 · 0 评论 -
Netty源码分析-MessageToMessageEncoder
消息到消息的编码器/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in co...原创 2020-04-13 10:35:41 · 667 阅读 · 0 评论 -
Netty源码分析-PromiseCombiner
这个类的作用是用户传递一个消息和一个Promise对象,但是实际编码时把一个消息转化为多个消息输出,那么实际会生成多个Promise对象,PromiseCombiner的作用就是代理用户传递的Promise,当所有消息输出操作完成时,通知用户。/* * Copyright 2016 The Netty Project * * The Netty Project licenses ...原创 2020-04-13 10:30:32 · 489 阅读 · 0 评论 -
Netty源码分析-MessageToMessageDecoder
package io.netty.handler.codec;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandler;import io.netty.channel.ChannelInboundHandlerAdapter;import io.nett...原创 2020-04-11 19:31:54 · 1148 阅读 · 0 评论 -
Netty源码分析-NioByteUnsafe(read读取流程)
NioByteUnsafe封装了NioSocketChannel读取底层数据的流程。NioEventLoop负责监听Selector上所有的事件,当发生事件时根据事件类型调用Channel的UnSafe中的方法去处理。private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) { fina...原创 2020-04-10 17:34:20 · 797 阅读 · 0 评论 -
Netty源码分析-AbstractUnsafe(register注册流程)
Netty当中的Channel,对外提供的API都封装再了AbstractUnsafe对象里面。我们分析一个新的客户端连接NioSocketChannel是如何完成注册的。注册h @Override public ChannelFuture register(final ChannelPromise promise) { ObjectUtil...原创 2020-04-10 16:53:16 · 484 阅读 · 0 评论 -
Netty源码分析-AdaptiveRecvByteBufAllocator
这个类的核心目的就是根据从底层socket读取的字节数量,动态调整分配空间,以及是否继续从socket读取字节流 @Override public final void read() { final ChannelConfig config = config(); if (shouldBreakReadRea...原创 2020-04-09 10:42:00 · 1193 阅读 · 0 评论 -
Netty源码分析-MessageToByteEncoder
MessageToByteEncoder是一个抽象编码器,子类可重新encode方法把对象编码为ByteBuf输出。源码分析package io.netty.handler.codec;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.Channel...原创 2020-03-28 09:21:06 · 903 阅读 · 0 评论 -
JWT-JAVA简单测试用例
package com.ht.web.util;import com.auth0.jwt.JWT;import com.auth0.jwt.JWTVerifier;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.exceptions.JWTCreationException;import com...原创 2020-03-11 15:49:59 · 848 阅读 · 0 评论 -
Netty源码分析-ChannelInitializer
ChannelInitializer是一个PPLine的初始化工具,可以往PPLine里面设置Handler。protected abstract void initChannel(C ch) throws Exception;我们可以重写此方法来完成初始化动作,往PPLine当中加入Handler。.childHandler(new ChannelInitializer<S...原创 2020-03-09 14:23:57 · 1108 阅读 · 0 评论 -
以太网数据帧(802.3)最大与最小长度
转载https://blog.csdn.net/farmwang/article/details/64131318以太网(IEEE 802.3)帧格式:1、前导码:7字节0x55,一串1、0间隔,用于信号同步2、帧起始定界符:1字节0xD5(10101011),表示一帧开始3、DA(目的MAC):6字节4、SA(源MAC):6字节5、类型/长度:2字节,0~1500保留为长度域值,...原创 2020-02-25 17:31:53 · 12322 阅读 · 0 评论 -
Netty-源码分析WeakReference用例
在研究Netty源码是大量使用了WeakReference引用,它是一个弱引用对象,当GC发生以后,会根据内存情况回收WeakReference引用的对象,届时WeakReference这个对象会被加入到队列中,进行最后的资源清理。public class MyReference extends WeakReference { public MyReference(Objec...原创 2020-01-09 16:52:08 · 527 阅读 · 0 评论 -
Netty-源码分析WebSocketClient客户端
WebSocketClient客户端使用Netty实现的源码分析EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bootstrap b = new Bootstrap(); // (1) b.group(workerGroup); // (2) ...原创 2019-12-26 09:31:37 · 1598 阅读 · 0 评论 -
Netty-源码分析DelimiterBasedFrameDecoder
DelimiterBasedFrameDecoder自定义分隔符解码器package io.netty.handler.codec;import static io.netty.util.internal.ObjectUtil.checkPositive;import io.netty.buffer.ByteBuf;import io.netty.channel.Chann...原创 2019-12-16 10:22:42 · 907 阅读 · 0 评论 -
Netty-源码分析LineBasedFrameDecoder
LineBasedFrameDecoder源码分析package io.netty.handler.codec;import io.netty.buffer.ByteBuf;import io.netty.channel.ChannelHandlerContext;import io.netty.util.ByteProcessor;import java.util.List;...原创 2019-12-10 13:28:34 · 756 阅读 · 0 评论 -
Netty-源码分析ByteBuf-readSlice和readRetainedSlice使用细节
返回从当前readerIndex开始的此缓冲区的子区域的新分片,并将readerIndex增加新分片的大小(=长度)。另请注意,此方法将不会调用retain(),因此不会增加引用计数。跟slice极为相似,只是把原始缓冲区的readerIndex进行了增加@Override public ByteBuf readSlice(int length) { ch...原创 2019-12-09 18:08:29 · 4033 阅读 · 0 评论 -
Netty-源码分析ByteBuf-slice和retainedSlice使用细节
Netty-源码分析ByteBuf-slice和retainedSlice使用细节slice()=slice(buf.readerIndex(), buf.readableBytes())源码片段,返回原始ByteBuf可读字节的一部分,修改返回的缓冲区或此缓冲区的内容会影响彼此的内容,他们维护单独的index和makers,此方法不会修改原始缓冲区的readerIndex或wri...原创 2019-12-09 18:01:54 · 5159 阅读 · 0 评论 -
Netty-TCP握手与挥手研究
客户端TCP状态装换时序图服务器端状态装换时序图package com.ht.web.tcp;import java.io.IOException;import java.net.Socket;import java.util.Arrays;public class TcpClient { public static void main(Strin...原创 2019-11-22 14:14:28 · 797 阅读 · 0 评论 -
Netty-(interestOps & readInterestOp) != 0写法的意义
//OP_READ = 1 00000001//OP_WRITE = 4 00000100//OP_CONNECT = 8 00001000//OP_ACCEPT = 16 00010000 protected final void removeReadOp() { SelectionKey key = selectionKey(); ...原创 2019-11-21 21:10:23 · 1085 阅读 · 0 评论 -
Netty-DirectByteBuffery源码分析
JVM参数 -XX:MaxDirectMemorySize=1024M 来设置可以使用的堆外内存大小。代码中可以使用VM工具类获取VM.maxDirectMemory()DirectByteBuffer源码分析DirectByteBuffer(int cap) { // package-private super(-1...原创 2019-11-21 16:17:11 · 321 阅读 · 0 评论 -
Netty源码分析-PoolThreadCache
final class PoolThreadCache { final PoolArena<byte[]> heapArena; final PoolArena<ByteBuffer> directArena; //分别存储堆外和堆内的内存,MemoryRegionCache内部结构是链表 private final Me...原创 2019-11-01 13:21:30 · 376 阅读 · 0 评论 -
Netty源码分析-PoolChunk
上图中是一个默认大小的chunk, 由2048个page组成了一个chunk,一个page的大小为8192, chunk之上有11层节点,最后一层节点数与page数量相等。每次内存分配需要保证内存的连续性,这样才能简单的操作分配到的内存,因此这里构造了一颗完整的平衡二叉树,所有子节点的管理的内存也属于其父节点。如果我们想获取一个8K的内存,则只需在第11层找一个可用节点...原创 2019-10-28 21:55:28 · 491 阅读 · 0 评论 -
Netty源码分析-PoolArena
1、PoolChunk:维护一段连续内存,并负责内存块分配与回收,其中比较重要的两个概念:page:可分配的最小内存块单位;chunk:page的集合;2、PoolSubpage:将page分为更小的块进行维护;3、PoolChunkList:维护多个PoolChunk的生命周期。多个PoolChunkList也会形成一个list,方便内存的管理。最终由PoolArena对这一系列类进...原创 2019-10-28 13:37:41 · 361 阅读 · 0 评论 -
Netty源码分析-PoolChunkList
前面我们介绍了PoolChunk以及针对page的更细粒度的PoolSubpage,其实在chunk的上层还有一个管理类:PoolChunkList,PoolChunkList负责管理多个chunk的生命周期,在此基础上对内存分配进行进一步的优化,那它是如何去做的呢?我们来简单的了解下,先看看它的几个属性: //arena,整个内存池管理的大管家 private final P...原创 2019-10-27 22:34:11 · 400 阅读 · 0 评论 -
Netty源码分析-内存模型PoolSubpage
PoolSubpage源码分析-这个方法获取一个long表示的64个比特位置是否还有空余空间 private int findNextAvail() { // 没有明确的可用位置时则挨个查找 final long[] bitmap = this.bitmap; final int bitmapLength = this...原创 2019-10-27 16:38:08 · 496 阅读 · 0 评论 -
Netty使用技巧-使用Openssl加密传输
JDK原生使用数字证书和PKCS#8格式的私钥完成SSL引擎的初始化。#使用JDK的SslEngine引擎初始化SslContentFile certChainFile=new File("/home/certs/nginx.crt");File keyFile=new File("/home/certs/pkcs8_rsa_private_key.pem");SslConte...原创 2019-10-22 17:39:57 · 4814 阅读 · 1 评论 -
Netty源码分析-Unsafe
Unsafe是JAVA提供偏底层的一个工具类,提供堆外内存管理,CAS操作,线程调度等功能。Unsafe这个类不能直接获取,需要用反射获取其对象。 //反射拿到Unsafe对象 private static Unsafe reflectGetUnsafe() { try { Field field = Unsafe.class....原创 2019-10-16 18:06:26 · 337 阅读 · 0 评论 -
Netty源码分析-PlatformDependent内存管理
PlatformDependent类当中的常量,定义了允许使用的堆外内存最大值,该值可以通过-XX:MaxDirectMemorySize=2G设置。private static final long MAX_DIRECT_MEMORY = maxDirectMemory0();在netty中,如果使用了堆外内存,Netty会进行统计,如果超过最大限制会抛出异常。 ...原创 2019-10-15 17:41:46 · 2024 阅读 · 0 评论 -
Netty源码分析-NioEventLoop(二)
NioEventLoop源码分析。EventLoop的本质:内部一个线程,一个有序队列存储,线程源源不断的运行队列中的任务。register方法把java-nio的channel注册到selector上面。 //把JAVA底层Channel注册到selector上 public void register(final SelectableChannel ch, f...原创 2019-10-14 14:45:23 · 320 阅读 · 0 评论 -
Netty源码分析-MultithreadEventExecutorGroup
MultithreadEventExecutorGrouppublic abstract class MultithreadEventExecutorGroup extends AbstractEventExecutorGroup { private final EventExecutor[] children; private final Set<Event...原创 2019-10-12 16:12:08 · 972 阅读 · 0 评论 -
Netty源码分析-SingleThreadEventExecutor
public abstract class SingleThreadEventExecutor extends AbstractScheduledEventExecutor implements OrderedEventExecutor { static final int DEFAULT_MAX_PENDING_EXECUTOR_TASKS = Math.max(16...原创 2019-10-12 15:13:51 · 1959 阅读 · 0 评论 -
Netty源码分析-AbstractScheduledEventExecutor
AbstractScheduledEventExecutor源码分析public abstract class AbstractScheduledEventExecutor extends AbstractEventExecutor { //比较器-根据ScheduledFutureTask的到期时间比较大小 //到期时间长的大 private static f...原创 2019-10-10 15:41:21 · 543 阅读 · 0 评论 -
Netty源码分析-GlobalEventExecutor
GlobalEventExecutor源码分析,GlobalEventExecutor内部只有一个线程执行队列中的任务,如果队列超过1秒没有新的任务,那么线程会结束, 此时如果再有新的任务加入,则会创建新的线程继续执行。package io.netty.util.concurrent;import io.netty.util.internal.logging.InternalLo...原创 2019-10-11 14:23:30 · 1360 阅读 · 0 评论 -
Netty源码分析-ProtobufVarint32LengthFieldPrepender
ProtobufVarint32LengthFieldPrepender源码分析package io.netty.handler.codec.protobuf;import com.google.protobuf.CodedOutputStream;import com.google.protobuf.nano.CodedOutputByteBufferNano;import ...原创 2019-09-25 18:09:13 · 1254 阅读 · 0 评论 -
Netty源码分析-InternalThreadLocalMap
class UnpaddedInternalThreadLocalMap { //ThreadLocal内部封装slowThreadLocalMap static final ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = new ThreadLocal<InternalThreadLo...原创 2019-06-11 14:14:11 · 1464 阅读 · 0 评论