public class NettyServer {
public static void main(String[] args) throws InterruptedException {
NioEventLoopGroup boosGruop = new NioEventLoopGroup();
NioEventLoopGroup workerGroup = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(boosGruop,workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
nioSocketChannel.pipeline().addLast(new FirstServerHandler());
}
}); ChannelFuture f = serverBootstrap.bind(8000).sync();
f.channel().closeFuture().sync(); }
}

ServerBootStrap

  服务端的辅助启动类,使用Builder模式隐藏了多个构造器的参数。

EventLoopGroup

  Reactor线程池。EventLoopGroup是EventLoop数组,EventLoop负责轮询所有注册到Selector上的channel。

绑定Channel

  用于指定服务端使用何种channel,可选的有NIO(NioServerSocketChannel)和BIO。netty屏蔽了这两种IO在使用上的区别,方便用户在NIO和BIO之间快速切换。由于在channel中传入的是一个类,所以这里是通过反射创建对象。

ChannelPipeline与ChannelHandler

  用来处理网络时间的责任链,负责管理和执行ChannelHandler,依据不同的网络时间调用ChannelHandler的不同方法去响应网络事件。除了用户自定义的ChannelHandler还有Netty提供的。

绑定端口

  这一步完成把Channel注册到Selector上

Selector轮询

  由EventLoop负责调度和执行Selector操作

调用执行ChannelHandler

  当注册的时间发生后,会调用ChannelPipeline并继而调用响应的ChannelHandler

Netty服务端创建流程及组件职责的更多相关文章

  1. Netty 服务端创建

    参考:http://blog.csdn.net/suifeng3051/article/details/28861883?utm_source=tuicool&utm_medium=refer ...

  2. Netty系列之Netty 服务端创建

    1. 背景 1.1. 原生NIO类库的复杂性 在开始本文之前,我先讲一件自己亲身经历的事:大约在2011年的时候,周边的两个业务团队同时进行新版本开发,他们都需要基于NIO非阻塞特性构建高性能.异步和 ...

  3. gRPC (1):入门及服务端创建和调用原理

    1. RPC 入门 1.1 RPC 框架原理 RPC 框架的目标就是让远程服务调用更加简单.透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP).序列化方式(XML/Json/ 二进制)和 ...

  4. Netty服务端NioEventLoop启动及新连接接入处理

    一 Netty服务端NioEventLoop的启动 Netty服务端创建.初始化完成后,再向Selector上注册时,会将服务端Channel与NioEventLoop绑定,绑定之后,一方面会将服务端 ...

  5. Netty服务端Channel的创建与初始化

    Netty创建服务端Channel时,从服务端 ServerBootstrap 类的 bind 方法进入,下图是创建服务端Channel的函数调用链.在后续代码中通过反射的方式创建服务端Channel ...

  6. netty服务端客户端启动流程分析

    服务端启动流程 我们回顾前面讲解的netty启动流程,服务端这边有两个EventLoopGroup,一个专门用来处理连接,一个用来处理后续的io事件 服务端启动还是跟nio一样,绑定端口进行监听,我们 ...

  7. Netty之旅三:Netty服务端启动源码分析,一梭子带走!

    Netty服务端启动流程源码分析 前记 哈喽,自从上篇<Netty之旅二:口口相传的高性能Netty到底是什么?>后,迟迟两周才开启今天的Netty源码系列.源码分析的第一篇文章,下一篇我 ...

  8. Netty 服务端启动过程

    在 Netty 中创建 1 个 NioServerSocketChannel 在指定的端口监听客户端连接,这个过程主要有以下  个步骤: 创建 NioServerSocketChannel 初始化并注 ...

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

    netty服务端启动--ServerBootstrap源码解析 前面的第一篇文章中,我以spark中的netty客户端的创建为切入点,分析了netty的客户端引导类Bootstrap的参数设置以及启动 ...

随机推荐

  1. HmacSHA256摘要算法2 MACCoder

    消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code) ...

  2. 【Json】Json分词器

    package com.hy; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNo ...

  3. javaweb--Rest访问(RestTemplate)

    Rest访问(RestTemplate)在实际的项目中,往往需要发送一个Get/Post请求到其他的系统(Rest API),比如向人员管理部门请求,然后解析返回信息获取该用户的基本信息等.JDK传统 ...

  4. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

  5. MAC下快速打开指定目录(转)

    使用了这么长时间MAC,打开文件查找目录总是感觉还是不如windows来的爽快 1.通过快捷键搜索   command + 空格,输入关键词 2.通过控制台打开    1) 跳转到指定路径  cd  ...

  6. C++main函数命令行选项——学习笔记

    atoi字符串的数转化为整数 atof转化为小数

  7. CentOS 7 配置 nginx php-fpm 详细教程

    CentOS 7 配置 Nginx 的步骤如下: 首先更新 yum,没有安装 yum 的自行安装 yum update 1. 安装 Nginx yum install nginx 开启 Nginx 并 ...

  8. 让remix使用本地文件系统

    让remix使用本地文件系统   转:https://blog.csdn.net/platocnet/article/details/83376792 1. 测试发现使用npm命令安装相关环境不成功, ...

  9. flutter 保持页面状态

    import 'package:flutter/material.dart'; import 'KeepAliveDemo.dart'; void main() => runApp(MyApp( ...

  10. IDEA使用tomcat插件

    在实际项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试. 这一切靠本地安装的tomcat是远远不够的,而且繁琐. 这里就需要用到tomca插件. 在pom.xml中引入: <bu ...