Bootstrap ServerBootstrap

Bootstrap的意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty的Bootstrap是客户端的引导开始类,ServerBootstrap是服务端的引导开始类。

常用的API有:

//该方法用于设置服务器端的BossGroup和WorkerGroup,第一个参数是BossGroup,第二个参数是WorkerGroup
public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)//该方法用于设置通道的类型,如果是服务端就设置NioServerSocketChannel,客户端就NioSocketChannel
public B channel(Class<? extends C> channelClass)//设置BossGroup的通道的配置项,通常是一些tcp的配置,option是配置项,value是值。
public <T> B option(ChannelOption<T> option, T value)//设置WorkerGroup的通道的配置项
public <T> ServerBootstrap childOption(ChannelOption<T> childOption, T value)//用来设置WorkerGroup的Socketchannel的pipeline里面的处理器。通常添加自己的业务处理类
public ServerBootstrap childHandler(ChannelHandler childHandler)//绑定地址。
public ChannelFuture bind(String inetHost, int inetPort)//下面两个是Bootstrap常用,也会有上面的API在这个使用
//连接服务器。
public ChannelFuture connect(String inetHost, int inetPort)//设置客户端的IO线程组。workerGroup
public B group(EventLoopGroup group)

Future、ChannelFuture

Netty中的所有IO操作都是异步的,不能立即得知消息是否被正确处理,所以可以使用这个并通过添加回调,使得可以在回调中进行处理。
如下代码:

public class ServerGroupChatServer {public  ConcurrentSkipListSet<SocketChannel> socketChannels = new ConcurrentSkipListSet();private  int port;public ServerGroupChatServer(int port){this.port = port;}public void start() throws InterruptedException {NioEventLoopGroup bossGroup = new NioEventLoopGroup();NioEventLoopGroup workerGroup = new NioEventLoopGroup();try {ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,128).childOption(ChannelOption.SO_KEEPALIVE,true).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {//socketChannels.add(socketChannel);//socketChannel.pipeline().addLast(new MyNettyChannelHandler(socketChannels));}});ChannelFuture bindFuture = serverBootstrap.bind("127.0.0.1", port);bindFuture.addListener(new GenericFutureListener<Future<? super Void>>() {@Overridepublic void operationComplete(Future<? super Void> future) throws Exception {//bindFuture是bind操作返回的返回值,在这里添加一个Listener后,当绑定成功后,会执行这个监听回调。//像其他返回ChannelFuture的操作皆可如此做。@Overridepublic void operationComplete(Future<? super Void> future) throws Exception {boolean success = future.isSuccess();if (success)System.out.println("服务绑定成功");else{System.out.println("服务绑定失败");}}}});bindFuture.channel().closeFuture().sync();}finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}public static void main(String[] args) throws InterruptedException {ServerGroupChatServer serverGroupChatServer = new ServerGroupChatServer(9898);serverGroupChatServer.start();}
}

future常见API:

//是否完成,完成就会触发监听回调,但是已完成不代表成功,也有可能失败
boolean isDone();
//是否执行成功
boolean isSuccess();//是否可取消
boolean isCancellable();
//取消
boolean cancel(boolean var1);
//是否已经被取消
boolean isCancelled();//添加一个监听器,当isDone方法
Future<V> addListener(GenericFutureListener<? extends Future<? super V>> var1);//当发生异常时,返回具体异常。
Throwable cause();//化异步为同步,也就是如果调用这个方法,会阻塞当前线程,直到异步任务完成。
ChannelFuture sync() throws InterruptedException;//获取返回结果,这个方法是阻塞的,直到异步任务执行完成返回返回值,还有一些其他超时的重载方法。
V get()//下面是channelFuture
//获取当前进行IO操作的通道
Channel channel();

结果:

channel

  1. 是Netty网络通信的组件,能够用于执行网络IO操作(读写等)。
  2. 通过Channel可以获得当前网络连接的通道状态。
  3. 通过Channel可以获得网络连接的配置参数。
  4. Channel提供了异步非阻塞的IO操作,异步非阻塞表示任何IO调用都将立即返回,不进行等待,并且不能保证IO操作能够立即完成,只能通过事件回调和事件监听来处理。
  5. 调用立即返回一个ChannelFuture实例,通过注册监听器到ChannelFuture上,可以对IO操作的成功/失败/取消等结果进行回调处理。

不同协议,对应的channel类型会有所不同。

  • NioServerSocketChannel :异步的服务端TCP Socket连接。
  • NioSocketChannel:异步的客户端TCP Socket连接。
  • NioDatagramChannel:异步的UDP连接。
  • NioSctpChannel:异步的客户端Sctp连接。
  • NioSctpServerChannel:异步的Sctp服务端连接。

Selector

  1. Netty基于Selector对象实现IO多路复用,通过Selector,一个线程可以监听多个channel事件。
  2. 当向一个Selector中注册了某个channel并且指定了相关感兴趣事件后,Selector内部机制就可以监控这些channel是否有就绪的IO事件(比如可读、可写等),并对相应发生事件进行处理,就可以实现一个程序处理多个Channel的情况。

剩下几个核心组件另开篇章

Netty核心模块组件相关推荐

  1. Netty之十大核心模块组件介绍

    1.Bootstrap.ServerBootstrap (1)简介 Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串 ...

  2. Spring Boot从零入门2_核心模块详述和开发环境搭建

    本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net 文章目录 1 前言 2 名词术语 3 Spring Boot核心模块 ...

  3. [转载]虚拟主机上安装Mambo核心系统/组件/模块技巧

    [转载]虚拟主机上安装Mambo核心系统/组件/模块技巧 虚拟主机上安装Mambo核心系统/组件/模块技巧 作者: lang3     (http://htmambo.com/) 虚拟主机大都限制了很 ...

  4. Netty 核心知识点

    Netty 是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端.Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活. N ...

  5. 一起手写Vue3核心模块源码,掌握阅读源码的正确方法

    最近和一个猎头聊天,说到现在前端供需脱节的境况.一方面用人方招不到想要的中高级前端,另一方面市场上有大量初级前端薪资要不上价. 特别是用 Vue 框架的,因为好上手,所以很多人将 Vue 作为入门框架 ...

  6. Spring的核心模块解析

    转载自 Spring的核心模块解析 Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下 ...

  7. Spring源码学习笔记:起源发展和核心模块主要职能

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.Spring 的前世今生 早在 2007 年,一个基于 Java语言的开源框架正式发布,取了一个非常有活力 ...

  8. 纯手工搭建k8s集群-(二)核心模块部署

    1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等.都需 ...

  9. 【饿了么】—— Vue2.0高仿饿了么核心模块移动端Web App项目爬坑(一)

    [饿了么]-- Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(一) 前言:学习Vue.js高仿饿了么课程过程中,总结了这个Web App项目从准备到开发完毕自己觉得很重要的知识 ...

最新文章

  1. Pytorch固定随机性
  2. leetcode-买卖股票的最佳时机④*
  3. Lync Server 2010迁移至Lync Server 2013部署系列 Part3:部署后端备用服务器
  4. php网站xml链接,xml图像超链接的制作代码
  5. 如何修改7 服务器配置,centos7修改服务器配置
  6. JAVA接口和抽象类的特点
  7. 蓝屏之死---stop:0X000000c5(0x000000c4等系列)---Mr.Zhang
  8. 电信光纤天翼网关将默认的路由模式修改为桥接模式
  9. java一寸是多少像素_一寸照片的尺寸是多少像素
  10. Android源代码分析--Preference之自动通话录音
  11. windows使用docker-compose安装PHP框架hyperf
  12. python扩展库用于科学计算的有哪些_数据科学必备的十大 Python 库
  13. AT89S52的看门狗定时器
  14. 【大数据入门核心技术-HBase】(九)Hbase协处理器coprocessor
  15. redis多实例常见部署方法和使用
  16. 最大子序列之和(C语言)
  17. windows rid劫持
  18. 基因对疾病的影响规律--读论文
  19. NSX-T系列:第1部分 - 架构和部署
  20. h5如何动态获取键盘高度_js获取软键盘高度

热门文章

  1. Java讲课笔记06:选择结构与条件循环
  2. 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配
  3. 向量的大小和方向,零向量的方向_3
  4. bzoj2242 [SDOI2011]计算器 exgcd+ksm+bsgs
  5. 2017.3.14 软件包管理器 思考记录
  6. sql如何取前几行_10 个不为人知的 SQL 技巧
  7. python付费课程推荐知乎_新手小白学习Python,有什么课程推荐吗?
  8. 用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速
  9. 复杂的权限按钮控制优化
  10. OSChina 周二乱弹 ——无人超市的出现,未来什么最重要?