课程咨询 :13623629309

太原PHP培训 > 达内新闻 > 太原php培训机构:深入浅出Netty——服务启动(3)
  • 太原php培训机构:深入浅出Netty——服务启动(3)

    发布:太原PHP培训      来源:码农网      时间:2016-09-12

  • ServerBootstrap

    通过serverBootstrap.bind(port)启动服务,过程如下:

    太原php培训机构

    bind过程

    doBind实现如下

    太原php培训机构

    1、方法initAndRegister返回一个ChannelFuture实例regFuture,通过regFuture可以判断initAndRegister执行结果。

    2、如果regFuture.isDone()为true,说明initAndRegister已经执行完,则直接执行doBind0进行socket绑定。

    3、否则regFuture添加一个ChannelFutureListener监听,当initAndRegister执行完成时,调用operationComplete方法并执行doBind0进行socket绑定。

    所以只有当initAndRegister操作结束之后才能进行bind操作。

    initAndRegister

    太原php培训机构

    1、主要负责创建服务端channel,在本例子中,创建了NioServerSocketChannel。

    2、为NioServerSocketChannel的pipeline添加handler。

    3、注册NioServerSocketChannel到selector。

    NioServerSocketChannel

    对Nio的ServerSocketChannel和SelectionKey进行了封装。

    继承关系:

    太原php培训机构

    NioServerSocketChannel继承关系

    构造方法:

    太原php培训机构

    1、方法newSocket利用 provider.openServerSocketChannel() 生成Nio中的ServerSocketChannel对象。

    2、设置SelectionKey.OP_ACCEPT事件。

    AbstractNioMessageChannel构造方法

    太原php培训机构

    啥也没做…

    AbstractNioChannel构造方法

    太原php培训机构

    设置当前ServerSocketChannel为非阻塞通道。

    AbstractChannel构造方法

    太原php培训机构

    1、初始化unsafe。

    这里的Unsafe并非是jdk中底层Unsafe类,用来负责底层的connect、register、read和write等操作。

    2、初始化pipeline。

    每个Channel都有自己的pipeline,当有请求事件发生时,pipeline负责调用相应的hander进行处理。

    unsafe和pipeline的具体实现原理会在后续进行分析。

    回到ServerBootstrap的init(Channel channel)方法,添加handler到channel的pipeline中。

    太原php培训机构

    1、设置channel的options和attrs。

    2、在pipeline中添加一个ChannelInitializer对象,每个client请求进来都会执行initChannel方法。

    init执行完,需要把当前channel注册到EventLoopGroup。

    其实最终目的是为了实现Nio中把ServerSocket注册到selector上,这样就可以实现client请求的监听了。

    看看Netty中是如何实现的:

    太原php培训机构

    因为EventLoopGroup中维护了多个eventLoop,next方法会调用chooser策略找到下一个eventLoop,并执行eventLoop的register方法进行注册。

    太原php培训机构

上一篇:太原php培训班:深入浅出Netty——服务启动(2)

下一篇:太原php培训机构:深入浅出Netty——服务启动(4)

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-30

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-30

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-30

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统