Netty服务端启动

Netty服务端启动过程

(1)创建服务端Channel:调用JDK底层的API创建一个JDK的Channel,然后netty将其包装成自己的Channel,同时创建一些基本组件绑定在此Channel上

(2)初始化服务端Channel:初始化一些基本属性,以及添加一些逻辑处理器

(3)注册selector:Netty将JDK底层的Channel注册到事件轮询器selector上面

(4)端口绑定:最终也是调用底层JDK的API实现对本地端口的监听

bind()[用户代码入口]

initAndRegister()[初始化并注册]

  newChannel()[创建服务端Channel]

   init()[初始化服务端Channel]

  AbstractChannel.register(channel)[注册selector]

  AbstractUnsafe.bind()[端口绑定]

(1)创建服务端Channel

bind()[用户代码入口]

initAndRegister()[初始化并注册]

newChannel()[创建服务端Channel]:通过反射创建Channel,通过反射的方式调用NioServerSocketChannel的构造函数。

反射创建服务端Channel:

newSocket()[通过jdk来创建底层jdk channel]

NioServerSocketChannelConfig()[tcp参数配置类]

AbstractNioChannel()

configureBlocking(false)[阻塞模式]:false为非阻塞

AbstractChannel() [创建id,unsafe,pipeline]

注:AbstractChannel() 服务端和客户端的Channel都是继承自AbstractChannel,AbstractChannel是对Channel的一个抽象。id是对应每一条Channel的唯一标识,unsafe是跟tcp相关的读写(底层的一个操作,netty自己用到的类),pipeline是服务端和客户端逻辑相关的一个逻辑链

(2)初始化服务端Channel

init()[初始化入口]

set ChannelOptions,ChannelAttrs

set ChildOptions,ChildAttrs

config handler[配置服务端pipeline]

add ServerBootstrapAcceptor[添加连接器]

总结:保存用户自定义的一些属性,通过这些属性创建一个连接接入器,连接接入器每次accept新的连接之后,都会使用这些属性对新的连接做一些配置。

(3)注册selector

AbstractChannel.register(channel)[入口]

this.eventLoop=eventLoop[绑定线程]

register0()[实际注册]

doRegister()[调用jdk底层注册]

invokeHandlerAddedIfNeeded()[事件的回调]

fileChannelRegistered()[传播事件] 将channel注册成功事件传播到用户的代码中

(4)端口绑定

AbstractUnsafe.bind()[入口]

doBind()

javaChannel().bind()[jdk底层绑定]

pipeline.fireChannelActive()[传播Active事件]

HeadContext.readIfIsAutoRead()

注: HeadContext.readIfIsAutoRead()将之前注册到seletor上的事件重新绑定为一个accept事件,这样新连接进来,selector就会轮询到,可将这个事件交给netty来处理

原文地址:https://www.cnblogs.com/chanaichao/p/9334377.html

时间: 2024-08-30 02:42:36

Netty服务端启动的相关文章

Netty 服务端启动过程

在 Netty 中创建 1 个 NioServerSocketChannel 在指定的端口监听客户端连接,这个过程主要有以下  个步骤: 创建 NioServerSocketChannel 初始化并注册 NioServerSocketChannel 绑定指定端口 首先列出一个简易服务端的启动代码: 1 public void start() { 2 EventLoopGroup bossGroup = new NioEventLoopGroup(1); 3 EventLoopGroup work

netty服务端启动--ServerBootstrap源码解析

netty服务端启动--ServerBootstrap源码解析 前面的第一篇文章中,我以spark中的netty客户端的创建为切入点,分析了netty的客户端引导类Bootstrap的参数设置以及启动过程.显然,我们还有另一个重要的部分--服务端的初始化和启动过程没有探究,所以这一节,我们就来从源码层面详细分析一下netty的服务端引导类ServerBootstrap的启动过程. spark中netty服务端的创建 我们仍然以spark中对netty的使用为例,以此为源码分析的切入点,首先我们看

原理剖析-Netty之服务端启动工作原理分析(下)

一.大致介绍 1.由于篇幅过长难以发布,所以本章节接着上一节来的,上一章节为[原理剖析(第 010 篇)Netty之服务端启动工作原理分析(上)]: 2.那么本章节就继续分析Netty的服务端启动,分析Netty的源码版本为:netty-netty-4.1.22.Final: 二.三.四章节请看上一章节 四.源码分析Netty服务端启动 上一章节,我们主要分析了一下线程管理组对象是如何被实例化的,并且还了解到了每个线程管理组都有一个子线程数组来处理任务: 那么接下来我们就直接从4.6开始分析了:

netty源码分析之服务端启动

ServerBootstrap与Bootstrap分别是netty中服务端与客户端的引导类,主要负责服务端与客户端初始化.配置及启动引导等工作,接下来我们就通过netty源码中的示例对ServerBootstrap与Bootstrap的源码进行一个简单的分析.首先我们知道这两个类都继承自AbstractBootstrap类 接下来我们就通过netty源码中ServerBootstrap的实例入手对其进行一个简单的分析. // Configure the server. EventLoopGrou

(二)Netty学习笔记之服务端启动

本文将不会对netty中每个点分类讲解,而是一个服务端启动的代码走读,在这个过程中再去了解和学习,这也是博主自己的学习历程.下面开始正文~~~~ 众所周知,在写netty服务端应用的时候一般会有这样的启动代码: (代码一) 1 EventLoopGroup bossGroup = new NioEventLoopGroup(1); 2 EventLoopGroup workerGroup = new NioEventLoopGroup(); 3 try { 4 ServerBootstrap b

zookeeper源码之服务端启动模块

服务端启动模块主要负责解析配置文件,启动服务器监听并执行zookeeper命令. 类图 QuorumPeerMain QuorumPeerMain是服务端主程序,主要功能是解析配置文件,启动zookeeper服务.内部使用QuorumPeerConfig来解析配置文件:使用QuorumPeer来解析命令:使用QuorumPeer来启动zookeeper服务. QuorumPeerConfig 解析properties配置文件zoo.cfg,主要获取一下信息: 配置 说明 dataDir 数据存放

Netty源码解析(2):服务端启动

package com.xiaofeiyang; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.chan

Netty服务端(源码一)

首先,整理NIO进行服务端开发的步骤: (1)创建ServerSocketChannel,配置它为非阻塞模式. (2)绑定监听,配置TCP参数,backlog的大小. (3)创建一个独立的I/O线程,用于轮询多路复用器Selector. (4)创建Selector,将之前创建的ServerSocketChannel注册到Selector上,监听SelectionKeyACCEPT. (5)启动I/O线程,在循环体中执行Selector.select()方法,轮训就绪的Channel. (6)当轮

【分布式】Zookeeper服务端启动

一.前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节. 二.服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. 配置文件解析. 2. 初始化数据管理器. 3. 初始化网络I/O管理器. 4. 数据恢复. 5. 对外服务. 2.1 单机版服务器启动 单机版服务器的启动其流程图如下 上图的过程可以分为预启动和初始化过程. 1. 预启动 1. 统一由QuorumPeerMain作为启动类.无论单机或集群,在zkSe