自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

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

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

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

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

原创 wireshark无法识别出TSL SSL数据包

最近发现使用wireshark打开HTTPS流量包,在协议部分看不到SSL/TLS,数据流量显示如下截图:

2020-04-16 09:53:22 203

原创 Netty源码分析-Bootstrap客户端连接过程

Netty源码分析-Bootstrap客户端连接过程下面是客户端连接模板代码 public static void main(String[] args) throws Exception { EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bootstr...

2020-04-13 16:53:08 51

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

原创 Netty源码分析-PromiseCombiner

这个类的作用是用户传递一个消息和一个Promise对象,但是实际编码时把一个消息转化为多个消息输出,那么实际会生成多个Promise对象,PromiseCombiner的作用就是代理用户传递的Promise,当所有消息输出操作完成时,通知用户。/* * Copyright 2016 The Netty Project * * The Netty Project licenses ...

2020-04-13 10:30:32 36

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

原创 Netty源码分析-NioByteUnsafe(read读取流程)

NioByteUnsafe封装了NioSocketChannel读取底层数据的流程。NioEventLoop负责监听Selector上所有的事件,当发生事件时根据事件类型调用Channel的UnSafe中的方法去处理。private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) { fina...

2020-04-10 17:34:20 66

原创 Netty源码分析-AbstractUnsafe(register注册流程)

Netty当中的Channel,对外提供的API都封装再了AbstractUnsafe对象里面。我们分析一个新的客户端连接NioSocketChannel是如何完成注册的。注册h @Override public ChannelFuture register(final ChannelPromise promise) { ObjectUtil...

2020-04-10 16:53:16 38

原创 Netty源码分析-AdaptiveRecvByteBufAllocator

这个类的核心目的就是根据从底层socket读取的字节数量,动态调整分配空间,以及是否继续从socket读取字节流 @Override public final void read() { final ChannelConfig config = config(); if (shouldBreakReadRea...

2020-04-09 10:42:00 41

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

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

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

原创 Centos6-IPtables配置端口转发

开启IP转发首先开启IP转发功能,默认是关闭的。临时修改:# echo 1 >/proc/sys/net/ipv4/ip_forward修改过后就马上生效,但如果系统重启后则又恢复为默认值0。永久修改:vi /etc/sysctl.conf# 找到下面的值并将0改成1net.ipv4.ip_forward = 1# sysctl -p(使之立即生效)默...

2020-03-05 16:29:15 131

原创 以太网数据帧(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 1069

原创 Netty-源码分析WeakReference用例

在研究Netty源码是大量使用了WeakReference引用,它是一个弱引用对象,当GC发生以后,会根据内存情况回收WeakReference引用的对象,届时WeakReference这个对象会被加入到队列中,进行最后的资源清理。public class MyReference extends WeakReference { public MyReference(Objec...

2020-01-09 16:52:08 103

原创 Netty-源码分析WebSocketClient客户端

WebSocketClient客户端使用Netty实现的源码分析EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bootstrap b = new Bootstrap(); // (1) b.group(workerGroup); // (2) ...

2019-12-26 09:31:37 219

原创 JAVA中的时区设置

JAVA中的时区设置第一种方式、通过代码指定。final TimeZone timeZone = TimeZone.getTimeZone("GTM+8");TimeZone.setDefault(timeZone);第二种方式、通过JVM参数指定 -Duser.timezone=Asia/Shanghai第三种方式、通过环境变量指定export TZ=...

2019-12-16 13:31:50 659

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

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

原创 Netty-源码分析ByteBuf-readSlice和readRetainedSlice使用细节

返回从当前readerIndex开始的此缓冲区的子区域的新分片,并将readerIndex增加新分片的大小(=长度)。另请注意,此方法将不会调用retain(),因此不会增加引用计数。跟slice极为相似,只是把原始缓冲区的readerIndex进行了增加@Override public ByteBuf readSlice(int length) { ch...

2019-12-09 18:08:29 756

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

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

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

原创 Netty-DirectByteBuffery源码分析

JVM参数 -XX:MaxDirectMemorySize=1024M 来设置可以使用的堆外内存大小。代码中可以使用VM工具类获取VM.maxDirectMemory()DirectByteBuffer源码分析DirectByteBuffer(int cap) { // package-private super(-1...

2019-11-21 16:17:11 37

原创 CentOS6.8Minimal安装Gnome桌面并安装Tigervnc进行远程管理

一、给Centos6.8Minimal安装桌面环境@1、安装桌面软件yum groupinstall "Desktop"@2、安装X-Window组件yum groupinstall "X Window System"@3、安装字体yum -y install dejavu-sans-* dejavu-serif-fonts@4、开机启动编辑/etc/inittab...

2019-11-19 16:55:17 113

原创 Netty源码分析-PoolThreadCache

final class PoolThreadCache { final PoolArena<byte[]> heapArena; final PoolArena<ByteBuffer> directArena; //分别存储堆外和堆内的内存,MemoryRegionCache内部结构是链表 private final Me...

2019-11-01 13:21:30 62

原创 Netty源码分析-PoolChunk

上图中是一个默认大小的chunk, 由2048个page组成了一个chunk,一个page的大小为8192, chunk之上有11层节点,最后一层节点数与page数量相等。每次内存分配需要保证内存的连续性,这样才能简单的操作分配到的内存,因此这里构造了一颗完整的平衡二叉树,所有子节点的管理的内存也属于其父节点。如果我们想获取一个8K的内存,则只需在第11层找一个可用节点...

2019-10-28 21:55:28 141

原创 Netty源码分析-PoolArena

1、PoolChunk:维护一段连续内存,并负责内存块分配与回收,其中比较重要的两个概念:page:可分配的最小内存块单位;chunk:page的集合;2、PoolSubpage:将page分为更小的块进行维护;3、PoolChunkList:维护多个PoolChunk的生命周期。多个PoolChunkList也会形成一个list,方便内存的管理。最终由PoolArena对这一系列类进...

2019-10-28 13:37:41 48

原创 Netty源码分析-PoolChunkList

前面我们介绍了PoolChunk以及针对page的更细粒度的PoolSubpage,其实在chunk的上层还有一个管理类:PoolChunkList,PoolChunkList负责管理多个chunk的生命周期,在此基础上对内存分配进行进一步的优化,那它是如何去做的呢?我们来简单的了解下,先看看它的几个属性: //arena,整个内存池管理的大管家 private final P...

2019-10-27 22:34:11 50

原创 Netty源码分析-内存模型PoolSubpage

PoolSubpage源码分析-这个方法获取一个long表示的64个比特位置是否还有空余空间 private int findNextAvail() { // 没有明确的可用位置时则挨个查找 final long[] bitmap = this.bitmap; final int bitmapLength = this...

2019-10-27 16:38:08 191

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

原创 Netty源码分析-Unsafe

Unsafe是JAVA提供偏底层的一个工具类,提供堆外内存管理,CAS操作,线程调度等功能。Unsafe这个类不能直接获取,需要用反射获取其对象。 //反射拿到Unsafe对象 private static Unsafe reflectGetUnsafe() { try { Field field = Unsafe.class....

2019-10-16 18:06:26 46

原创 Netty源码分析-PlatformDependent内存管理

PlatformDependent类当中的常量,定义了允许使用的堆外内存最大值,该值可以通过-XX:MaxDirectMemorySize=2G设置。private static final long MAX_DIRECT_MEMORY = maxDirectMemory0();在netty中,如果使用了堆外内存,Netty会进行统计,如果超过最大限制会抛出异常。 ...

2019-10-15 17:41:46 147

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

原创 Netty源码分析-MultithreadEventExecutorGroup

MultithreadEventExecutorGrouppublic abstract class MultithreadEventExecutorGroup extends AbstractEventExecutorGroup { private final EventExecutor[] children; private final Set<Event...

2019-10-12 16:12:08 95

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

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