May 17, 2017

Netty连接超时分析

常用用法为

Bootstrap bootstrap = new Bootstrap();

bootstrap.option(ChannelOption.CONNECT_TIMEOUT,3000);// 设置连接超时时间

ChannelFuture future = bootstrap.connect(server,port);

connect()最终执行的代码为AbstrcatNioChannel.connect()方法,实现如下:

跟踪下去会进入到doConnect()方法中,有

@Override

public final void connect(

final So......

May 16, 2017

Redis内存

内存消耗

Redis里面内存统计指标

属性名

属性说明

used_memory

Redis分配器分配的内存总量,也就是内部存储的所有数据的内存占用量

used_memory_human

used_memory的可读形式

used_memory

操作系统角度显示Redis进程占用的内存总量

used_memory_peak

内存使用的最大值,表示used_memory的峰值

used_memory_peak_human

以可读的形式表示used_memory_peak

used_memory_lua

Lua引擎消耗的内存

mem_fragmentation......

May 15, 2017

close()与shutdownGracefully()

state:writing

Channel.close()与EventExecutorGroup.shutdownGracefully()

Channel.close()

Channel.close()的定义为:

/**

* Request to close this {@link Channel} and notify the {@link ChannelFuture} once the operation completes,

* either because the operation was successful or because of

* an error.

*......

May 10, 2017

Netty数据流分析

前言

稍微对tcp/ip协议有了解的同学都会知道,数据都是以二进制流的形式在网络上进行传播的,而且这些二进制流没有起始和结束标志。我们处理的往往都是Java对象,因此在接收到二进制流数据之后需要对数据进行拆包和反序列化成对象。

这篇文章就是从源代码角度来分析Netty中从接收到数据二进制流到转化为Java对象整个过程。

第一步:接收数据

Netty底层是以Java NIO来实现的,所以Netty中是在Selector中接收数据的,具体的代码在NioEventLoop.processSelectedKey()这个方法中,代码如下:

private static void processSe......

May 03, 2017

Netty序列化解析

state:writing

前言

之前被同事问到Netty里面怎么实现Java对象的编解码,对于这个问题不是很清楚,所以花了点时间看了下Netty里面编解码的源代码,记录在这篇文章中。

Netty提供了ObjectEncoder和ObjectDecoder这两个类来支持对对象的编码和解码工作。

第一部分:编码(ObjectEncoder)

用法

源代码分析

ObjectEncoder类继承关系如下图所示: