
Netty
文章平均质量分 83
ph3636
这个作者很懒,什么都没留下…
展开
-
Netty通讯
Netty通讯原创 2018-01-22 18:14:52 · 594 阅读 · 0 评论 -
Netty源码分析之注册服务端通道(上)
判断是否是本线程目前是在主线程中,所以为falsepublic void execute(Runnable task) { if (task == null) { throw new NullPointerException("task"); } boolean inEventLoop = inEventLoop(); if (inEven...原创 2019-07-05 14:28:06 · 381 阅读 · 0 评论 -
Netty源码分析之注册服务端通道(下)
设置promise为成功状态protected final void safeSetSuccess(ChannelPromise promise) { if (!(promise instanceof VoidChannelPromise) && !promise.trySuccess()) { logger.warn("Failed to mark ...原创 2019-07-05 15:34:29 · 222 阅读 · 0 评论 -
Netty源码分析之绑定服务端通道
判断网络通道是否已经注册完毕分别执行同步或者添加监听器操作if (regFuture.isDone()) { // At this point we know that the registration was complete and successful. ChannelPromise promise = channel.newPromise(); doBind0...原创 2019-07-05 15:44:12 · 413 阅读 · 0 评论 -
Netty源码分析之激活服务端通道
通道绑定活跃后激活管道的处理器public final ChannelPipeline fireChannelActive() { AbstractChannelHandlerContext.invokeChannelActive(head); return this;}static void invokeChannelActive(final AbstractChan...原创 2019-07-05 15:46:26 · 859 阅读 · 0 评论 -
Netty源码分析之核心线程处理
核心线程是NioEventLoop,在第一次往任务队列中添加任务时开始启动线程abstract class SingleThreadEventExecutor extends AbstractScheduledEventExecutor implements OrderedEventExecutorthread = threadFactory.newThread(new Runnable(...原创 2019-07-05 15:51:55 · 309 阅读 · 0 评论 -
Netty源码分析之客户端初始化
客户端初始化,大体上和服务端类似,设置通道的网络选项,常设置的有超时时间,是否禁用Nagle优化的TCP_NODELAY,这个参数的意思是,当某一次的发送数据量很小的话,他不会立即发送给对方,等待一段时间或者当需要发送的数据量达到窗口的大小时才会正式发送给对方,实时性要求比较高的业务一般都会禁用这个优化。// Configure the client.EventLoopGroup grou...原创 2019-07-05 15:56:20 · 258 阅读 · 0 评论 -
Netty源码分析之建立连接(上)
客户端发起连接请求网络模块开始与服务端建立连接,确保参数的有效性,建立连接失败的话就根据是否设置过超时时间来使用延迟任务判断最终的链接结果来通知主程序,以及设置监听器来选择性决定关闭其他资源。protected abstract class AbstractNioUnsafe extends AbstractUnsafe implements NioUnsafepublic fi...原创 2019-07-07 10:43:54 · 391 阅读 · 0 评论 -
Netty源码分析之建立连接(下)
服务端接收处理器专门针对客户端连接请求做了处理,往新建客户端通道的管道中添加服务端刚开始设置的子处理器,把对应的网络选项以及参数设置到配置中,最后从子线程组中挑选一个线程注册到客户端通道上,专门用于与客户端进行网络交互private static class ServerBootstrapAcceptor extends ChannelInboundHandlerAdapterpublic...原创 2019-07-07 10:47:23 · 300 阅读 · 0 评论 -
Netty源码分析之编解码
编码类MessageToByteEncoder本次用ObjectEncoder举例,当需要往网络通道中写消息时需要进行消息编码,判断消息类型是否满足条件,一般用的是类型匹配,配置在泛型中public abstract class MessageToByteEncoder<I> extends ChannelOutboundHandlerAdapterpublic b...原创 2019-07-23 10:10:04 · 230 阅读 · 0 评论 -
Netty源码分析之管道处理器
添加管道处理器,可以指定对应的线程组来单独处理该处理器public final ChannelPipeline addLast(ChannelHandler... handlers) { return addLast(null, handlers);}public final ChannelPipeline addLast(EventExecutorGroup executo...原创 2019-07-05 14:24:17 · 317 阅读 · 0 评论 -
Netty源码分析之初始化服务端通道
初始化服务端启动程序ServerBootstrap,设置两个线程池,bossGroup监听本地绑定端口,专门用来处理客户端连接请求以及一些服务端的任务,然后在workerGroup给这个客户端Channel分配一个线程进行后续处理,只绑定一个端口的话这个通常可以设置成1,NioEventLoopGroup默认值是处理器核心数的两倍,第二个具体处理与客户端的I/O读写请求以及一些其他任务,b.cha...原创 2019-07-05 14:20:16 · 270 阅读 · 0 评论 -
Netty服务端启动
Netty服务端启动原创 2018-01-20 11:31:06 · 2947 阅读 · 0 评论 -
Netty客户端启动
Netty客户端启动原创 2018-01-20 17:23:43 · 1625 阅读 · 0 评论 -
Netty的FastThreadLocal解析
Netty版本为4.1,1. 存储结构InternalThreadLocalMap以及他的父类UnpaddedInternalThreadLocalMap,并且改用数组来存储线程相关数据,而JDK的ThreadLocal是用类似Map的形式,数组下标形式扩容和增删改查很迅速,nextIndex主要作为全局计数,也就是线程存储的数据具体在线程InternalThreadLocalMap属性数组中的下...原创 2018-07-11 12:25:28 · 580 阅读 · 0 评论 -
Netty源码分析之写消息
客户端发送消息,经过管道的处理器处理,首先是尾节点public abstract class AbstractChannel extends DefaultAttributeMap implements Channelpublic ChannelFuture writeAndFlush(Object msg) { return pipeline.writeAndFlush(msg)...原创 2019-07-07 21:44:28 · 156 阅读 · 0 评论 -
Netty源码分析之刷新消息(上)
把消息刷新进网络通道private void invokeFlush0() { try { ((ChannelOutboundHandler) handler()).flush(this); } catch (Throwable t) { notifyHandlerException(t); }}各个流出类型的处理器进行处理...原创 2019-07-07 21:47:31 · 286 阅读 · 0 评论 -
Netty源码分析之刷新消息(下)
判断统计的buffer类型消息数量,如果不为0的话有可能是多个buffer消息,直接写进网络通道即可// Always us nioBuffers() to workaround data-corruption.// See https://github.com/netty/netty/issues/2761switch (nioBufferCnt) { case 0: ...原创 2019-07-07 21:51:42 · 191 阅读 · 0 评论 -
Netty源码分析之读消息(上)
服务端获取到读事件,网络模块开始读取消息public final class NioEventLoop extends SingleThreadEventLoop// Also check for readOps of 0 to workaround possible JDK bug which may otherwise lead// to a spin loopif ((read...原创 2019-07-07 21:54:31 · 307 阅读 · 0 评论 -
Netty源码分析之读消息(下)
一个完整的消息可能需要读取多次,判断每次读取的数据大小,判断是否已经读取完毕,释放内存,设置准备读状态等。ByteBuf byteBuf = null; int messages = 0; boolean close = false; try { int totalReadAmount = 0; boolean readPending...原创 2019-07-07 21:56:47 · 253 阅读 · 0 评论 -
Netty源码分析之线程组
基于4.0版本。初始化线程组,设置线程数,线程工厂类,选择器提供者,默认的选择器选择策略,任务队列拒绝策略SelectorProvider.provider(), DefaultSelectStrategyFactory.INSTANCE, RejectedExecutionHandlers.reject()public NioEventLoopGroup(int nThreads, Th...原创 2019-07-05 14:16:58 · 359 阅读 · 0 评论 -
Netty源码分析之定时器HashedWheelTimer
这是一个环状的定时器,含有多个槽,任务就放到槽中,链表形式存储,标记时间是固定的,然后根据任务的具体定时时间与调度时间的关系分配到不同的槽中,达到定时执行的效果。实例化定时器,参数分别为线程工厂,标记时间,时间单位,槽数量,是否需要检查内存泄漏,最大等待执行的任务数。public HashedWheelTimer( ThreadFactory threadFactory, ...原创 2019-07-23 10:14:11 · 535 阅读 · 0 评论