前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为bind做准备.照例粘贴一下这个三朝元老的demo,开始本文内容. public class NettyDemo1 { // netty服务端的一般性写法 public static void main(String[] args) { EventLoopGroup boss = new NioEve…
前言 最近趁着跟老东家提离职之后.到新公司报道之前的这段空闲时期,着力研究了一番netty框架,对其有了一些浅薄的认识,后续的几篇文章会以netty为主,将近期所学记录一二,也争取能帮未对netty有过了解的园友对netty建立一个完整的认识.netty作为一个优秀的网络框架,值得为其花费一番时间. netty的内容细究一下也有不少(虽然与Spring这种庞大的框架相比代码量少很多),本文作为netty系列的第一篇,决定先攀登一个高峰:讲一下netty的串行无锁化.这是netty的一个招牌特性,…
前言 NioEventLoopGroup是netty对Reactor线程组这个抽象概念的具体实现,其内部维护了一个EventExecutor数组,而NioEventLoop就是EventExecutor的实现(看名字也可发现,一个是NioEventLoopGroup,一个是NioEventLoop,前者是集合,后者是集合中的元素).一个NioEventLoop中运行着唯一的一个线程即Reactor线程,这个线程一直执行NioEventLoop的run方法.这个run方法就是netty的核心方法,…
前言     NioEventLoop的run方法,是netty中最核心的方法,没有之一.在该方法中,完成了对已注册的channel上来自底层操作系统的socket事件的处理(在服务端时事件包括客户端的连接事件和读写事件,在客户端时是读写事件).单线程任务队列的处理(服务端的注册事件.客户端的connect事件等),当然还包括对NIO空轮询的规避.消息的编解码等.下面一起来探究一番,首先奉上run方法的源码: protected void run() { for (;;) { try { try…
前言 根据前文我们知道,NioEventLoopGroup和NioEventLoop是netty对Reactor线程模型的实现,而本文要说的ServerBootstrap是对上面二者的整合与调用,是一个统筹者和协调者.具体netty使用的是Reactor单线程模型还是多线程模型.抑或者主从多线程模型,都是ServerBootstrap的不同配置决定的. 下面照例粘贴一下示例demo(以Reactor多线程模式构建),开始正文. public class NettyDemo1 { // netty…
本文会分析Netty服务器的启动过程,采用的范例代码是Netty编写的Echo Server. 0. 声明acceptor与worker 由于Netty采用的reactor模型,所以需要声明两组线程,一组作为boss/acceptor,另一组作为worker boss/acceptor负责监听绑定的端口,accept新接入的连接,然后将这些连接转交给worker,worker会处理这些连接上的读写事件. 也就是下面的代码: EventLoopGroup bossGroup = new NioEv…
给你一台4路E7-4820V2(32核心64线程),512G内存的服务器,你该如何编程才能支持百万长连接? 最直接的想法是采用BIO的模式,为每个连接新建一个线程,在一一对应的线程中直接处理连接上的数据请求. 但在Java中,新建线程的开销非常昂贵(默认情况下每个线程会占据1M多的内存,百万连接就是1T内存,这显然是不可接受的) 优化点的想法是使用Java NIO,用一个线程来处理所有客户端的请求. 但是根据我之前的测试,单个线程最多同时处理5w/s的echo message,此时单个core已…
Netty 源码学习--EventLoop 在前面 Netty 源码学习--客户端流程分析中我们已经知道了一个 EventLoop 大概的流程,这一章我们来详细的看一看. NioEventLoopGroup 类层次结构 我们先来看下 NioEventLoopGroup 这个类. public class NioEventLoopGroup extends MultithreadEventLoopGroup { } 发现他的父类是 MultithreadEventLoopGroup.我们有必要来看…
前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高并发之道.学习一个框架之前,我们首先要弄懂它的设计原理,然后再进行深层次的分析. 接下来我们从三个方面来分析 Netty 的架构设计. Selector 模型 Java NIO 是基于 Selector 模型来实现非阻塞的 I/O.Netty 底层是基于 Java NIO 实现的,因此也使用了 Se…
上一篇博客中[Netty源码学习]ChannelPipeline(二)我们介绍了接口ChannelPipeline的提供的方法,接下来我们分析一下其实现类DefaultChannelPipeline具体实现了哪些功能. 之前我们已经了解过DefaultChannelPipeline其实是一个ChannelHandlerContext的循环链表,对于网络数据的接收处理以及处理发送都在ChannelHandlerContext的实现类中,其具体操作我们接下来会详细分析. 在DefaultChanne…