netty NioServerSocketChannel注册流程一

原创 2016年08月28日 16:03:07

  netty server端启动一般用以下代码:

	ServerBootstrap bootstrap = new ServerBootstrap();
		NioEventLoopGroup boss = new NioEventLoopGroup(1);
		NioEventLoopGroup work = new NioEventLoopGroup(2 * Runtime.getRuntime().availableProcessors());
		bootstrap.group(boss, work);
		bootstrap.channel(NioServerSocketChannel.class);
		bootstrap.localAddress("localhost", 8081);
		bootstrap.childHandler(new ChannelInitializer<Channel>() {
			@Override
			protected void initChannel(Channel ch) throws Exception {
				ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, Delimiters.lineDelimiter()));
				ch.pipeline().addLast(new StringDecoder(StandardCharsets.UTF_8));
				ch.pipeline().addLast(new EchoHandlerTest());
			}
		});

		try {
			// 开始绑定server,阻塞直到绑定成功
			ChannelFuture channelFuture = bootstrap.bind().sync();
			
			System.out.println(">server started");
			
			//阻塞直到关闭成功
			channelFuture.channel().closeFuture().sync();
			
			System.out.println(">server close");
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			// 关闭资源,boss线程组及work线程组
			boss.shutdownGracefully();
			work.shutdownGracefully();
		}


    而核心流程是bootstrap.bind() 绑定流程。简单来讲,主要是:

    1.创建NioServerSocketChannel

    2.向操作系统申请socket文件句柄

    3.初始化NioServerSocketChannel的pipeLine及相应属性

    4.分配个boss线程,并启动它,由它来完成以下事情

    5.将该channel注册到selector上。底层看是epoll还是其它reactor技术实现。做的事情就是将该channel对应socket文件句柄关心的事件注册到操作系统。这里为0,先不注册感兴趣事件。

   6.调用socket bind方法,让操作系统开启一条tcp连接。

   7.如果autoRead属性为true(默认为true)则马上将accept事件注册到selector上。

   执行完这些步骤后,boss线程就不断轮循,看是否有感兴趣事件发生,这里为连接事件。

   流程图如下:

  


  

    

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

netty serverSocket注册流程二

netty serverSocket注册流程二

Netty In Action中文版 - 第十六章:从EventLoop取消注册和重新注册

本章介绍

Epoll在Nio中的实现

java nio 和epoll实现

两种 NIO 实现:Selector 与 Epoll

【总结】两种 NIO 实现:Selector 与 Epoll 时间2012-11-17 08:38:42 开源中国新闻 原文  http://my.oschina.net/ielts0909/b...

netty5笔记-总体流程分析3-NioServerSocketChannel

前面我们讲了server的启动过程,同时介绍了其中非常重要的几个概念,ChannelPipeline,ChannelHandlerContext等。接下来我们看看server启动起来以后是如何运转的。

netty源代码解读-架构流程

今天读了一片关于Netty架构流程的文章,感觉可以作为我上一篇《Netty基础介绍与框架搭建》的补充,在这里转载下。 netty是什么?直接用官方的介绍-netty是一个异步的,基于事件的网络框...

MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)

MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)

NIO 框架Netty4.x 整体流程和使用

这篇文章假设你对netty已经有了一点小小的了解,不同于”hello world”的编写,这篇文章叙述的东西更多。其实是在我做完一个netty服务器以后写下的总结。 netty api:http:/...

Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析

流程图:     该图是OneCoder通过阅读Netty源码,逐渐记录下来的。基本可以说明Netty服务的启动流程。这里在具体讲解一下。   首先说明,我们这次顺利的流程是基于...

Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析

有一段事件没有更新文章了,各种原因都有吧。搬家的琐事,搬家后的安逸呵呵。不过,OneCoder明白,绝不能放松。对于Netty的学习,也该稍微深入一点了。 所以,这次OneCoder花了几天时间,仔细...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)