深入浅出Netty之二 server启动
来源:互联网 发布:百度评论数据怎么更新 编辑:程序博客网 时间:2024/05/16 04:48
以netty提供的echo server作为分析入口,echoServer代码:
- public void run() {
- // 构造NioServerSocketChannelFactory,初始化bootstrap
- ServerBootstrap bootstrap = new ServerBootstrap(
- new NioServerSocketChannelFactory(
- Executors.newCachedThreadPool(),
- Executors.newCachedThreadPool()));
- // 创建一个自定义的PipelineFactory
- bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
- public ChannelPipeline getPipeline() throws Exception {
- return Channels.pipeline(new EchoServerHandler());
- }
- });
- // 开始bind端口,启动server
- bootstrap.bind(new InetSocketAddress(port));
- }
public void run() {// 构造NioServerSocketChannelFactory,初始化bootstrapServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));// 创建一个自定义的PipelineFactorybootstrap.setPipelineFactory(new ChannelPipelineFactory() {public ChannelPipeline getPipeline() throws Exception {return Channels.pipeline(new EchoServerHandler());}});// 开始bind端口,启动serverbootstrap.bind(new InetSocketAddress(port));}
Server启动过程:
一.ServerBootstrap配置,NioServerSocketChannelFactory初始化
1. 构造NioWorkerPool,启动worker线程,默认个数CPU*2
- public NioServerSocketChannelFactory(
- Executor bossExecutor, Executor workerExecutor,
- int workerCount) {
- this(bossExecutor, new NioWorkerPool(workerExecutor, workerCount));
- }
public NioServerSocketChannelFactory( Executor bossExecutor, Executor workerExecutor, int workerCount) { this(bossExecutor, new NioWorkerPool(workerExecutor, workerCount)); }
2.创建worker数组
- workers = new AbstractNioWorker[workerCount];
- for (int i = 0; i < workers.length; i++) {
- workers[i] = createWorker(workerExecutor);
- }
- this.workerExecutor = workerExecutor;
workers = new AbstractNioWorker[workerCount]; for (int i = 0; i < workers.length; i++) { workers[i] = createWorker(workerExecutor); } this.workerExecutor = workerExecutor;
- protected NioWorker createWorker(Executor executor) {
- return new NioWorker(executor);
- }
protected NioWorker createWorker(Executor executor) { return new NioWorker(executor); }
3.打开选择器
- AbstractNioWorker(Executor executor) {
- this.executor = executor;
- openSelector();
AbstractNioWorker(Executor executor) { this.executor = executor; openSelector(); }
4. 启动worker线程
- selector = Selector.open();
- ....
- DeadLockProofWorker.start(executor, new ThreadRenamingRunnable(this,"New I/O worker #" + id));
- ...
selector = Selector.open();.... DeadLockProofWorker.start(executor, new ThreadRenamingRunnable(this, "New I/O worker #" + id));...
5.初始化NioServerSocketPipelineSink,将workerPool注册到PipelineSink中
- 深入浅出Netty之二 server启动
- 深入浅出Netty之三 Server请求处理
- Netty学习之二
- 深入浅出Netty
- 深入浅出Zookeeper之一Server启动
- Spark RPC之Netty启动
- Netty的启动执行过程分析(二)
- Netty 学习笔记之二 Netty 核心概念
- Netty 之 netty源码学习之netty server端源码初读(上)
- Netty之 netty源码学习之netty server端源码初读(下)
- java netty之ServerBootstrap的启动
- netty 之 ServerBootstrap的启动流程
- netty源码分析之服务端启动全
- 深入浅出之正则表达式(二)
- 深入浅出之正则表达式(二)
- 深入浅出之正则表达式(二)
- Android深入浅出之二(布局)
- 《深入浅出Netty》【PDF】下载
- LCM Challenge--codeForces 235A
- 快递100 java 示例API 返回结果乱码 之替代方案
- POJ3982《序列》方法:高精度
- RC加密解密算法C源代码
- android应用 小试牛刀 开发自己的应用程序就是这么简单
- 深入浅出Netty之二 server启动
- 深度解析Java内存的原型
- C语言修行之文件操作
- 和我一起学 Selenium WebDriver(3)——基础篇
- [CF]276E. Little Girl and Problem on Trees 树状数组
- google翻译逆天了逆天了(搞笑版)
- android客户端加密代码
- spring mvc中的拦截器小结
- 在社会上闯荡必须要牢记的 (第六条和第七条写得真是太绝了)