当前位置: 首页 > news >正文

台州免费建站永州静默管理

台州免费建站,永州静默管理,请人做网站要多,百度下载安装2021优质博文:IT-BLOG-CN 一、Netty 服务端启动过程 【1】创建服务端Channel; 【2】初始化服务端Channel; 【3】注册Selector; 【4】端口绑定:我们分析源码的入口从端口绑定开始,ServerBootstrap的bind(int in…

优质博文:IT-BLOG-CN

一、Netty 服务端启动过程

【1】创建服务端Channel
【2】初始化服务端Channel
【3】注册Selector
【4】端口绑定:我们分析源码的入口从端口绑定开始,ServerBootstrapbind(int inetPort)方法,实际上是AbstractBootstrapbind(int inetPort)方法。ServerBootstrap继承了AbstractBootstrap

二、分析服务端创建Channel的过程

【1】bind()【分析入口,端口绑定】在bind()方法中,有一个doBind()方法,处理端口绑定:

public ChannelFuture bind(SocketAddress localAddress) {validate();if (localAddress == null) {throw new NullPointerException("localAddress");}return doBind(localAddress);// 实际绑定
}

【2】在doBind()方法中,调用initAndRegister来处理初始化和注册:

private ChannelFuture doBind(final SocketAddress localAddress) {final ChannelFuture regFuture = initAndRegister();// 初始化与注册// ...
}

【3】initAndRegister()【初始化并注册】进入initAndRegister()方法里面,发现是调用了channelFactory(Channel工厂) 的newChannel()来创建channel

final ChannelFuture initAndRegister() {Channel channel = null;try {channel = channelFactory.newChannel();// channelFactory创建Channelinit(channel);}//...
}

【4】newChannel()【创建服务端channel】进去newChannel()方法,就能看到,实际上是通过反射Class.newInstance()来创建Channel对象的:

public T newChannel() {try {return clazz.newInstance();// Channel工厂通过反射,来创建Channel} catch (Throwable t) {throw new ChannelException("Unable to create Channel from class " + clazz, t);}
}

那么,这个class到底是啥呢,什么时候传递进来的?

【5】ChannelFactory的初始化:【接收服务端ChannelClass,通过反射生成Channel】还记得之前我们的第一个Demo里面有一个channel()方法,我们传递了一个参数NioServerSocketChannel.class

ServerBootstrap serverBoot = new ServerBootstrap();
serverBoot.group(bossGroup,workGroup).channel(NioServerSocketChannel.class)// 设置服务端Channel//...
);

进去channel()方法中:

public B channel(Class<? extends C> channelClass) {if (channelClass == null) {throw new NullPointerException("channelClass");}return channelFactory(new ReflectiveChannelFactory<C>(channelClass));// 传递class给ChannelFactory的构造方法
}

然后,我们进去ChannelFactory的构造方法里面:

public ReflectiveChannelFactory(Class<? extends T> clazz) {if (clazz == null) {throw new NullPointerException("clazz");}this.clazz = clazz;// 接收传递进来的Channel的Class
}
@Override
public T newChannel() {try {return clazz.newInstance();// 通过Channel的Class反射生成Channel对象} catch (Throwable t) {throw new ChannelException("Unable to create Channel from class " + clazz, t);}
}

到此,Channel的创建过程就出来了,一句话总结就是:通过我们在ServerBootstrapchannel(clazz)方法里面设置的Class,通过Java反射,Class.newInstance来生成最终的Channel对象。

http://www.sczhlp.com/news/130070/

相关文章:

  • 网络工程师课程网站关键词优化外包服务
  • 邹城市建设局网站怎么样开发小程序
  • 手机网站打不开是什么原因造成的wordpress著名案例
  • dw做的网站如何上传云服务企业宣传报道模板范文
  • 免费自己创建个人网站网站优化和提升网站排名怎么做
  • 免费ppt模板网站哪个好用简要叙述如何规划建设一个企业网站
  • 郑州网站建设蝶动做一个网上app软件多少钱
  • 网站关键词有哪些淘宝客推广
  • 做货代的可以在哪些网站打广告重庆seo俱乐部联系方式
  • 做同城特价的网站有哪些个人作品网站
  • 网站备案接口龙岗营销网站建设
  • 深圳手机商城网站设计2023年装修风格及颜色
  • js 网站首页下拉广告网站设计 app开发
  • 新学期每日总结(第2天)
  • 在CodeBolcks下wxSmith的C++编程教程——使用菜单和组件
  • 怎样给建设的网站提意见wordpress付费服务器
  • 快递公司网站源码腾讯云主机做网站
  • 茂名建站公司山东省工程建设造价信息网站
  • 一个工厂做网站有什么好处辽宁城乡建设部网站首页
  • 设计美观网站有哪些wordpress用户注册插件下载
  • 北京云网站建设番禺知名网站建设公司
  • 榆林网站建设公司电话wordpress博客搬家主页404
  • 外贸网站外链泰州百度seo
  • 网站制作找wordpress的seo标题怎么写
  • 自己建的网站有乱码合肥建设工程信息网
  • 单调队列
  • 软工第一次编程
  • 第二次软工作业
  • 开一家网站建设公司要多少钱网站建设目前流行什么
  • 平面设计免费素材网站网站制作费