课程咨询 :0351-5608878

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

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

  • channel.unsafe()是什么?

    NioServerSocketChannel初始化时,会创建一个NioMessageUnsafe实例,用于实现底层的register、read、write等操作。

    太原php培训机构

    太原php培训

    1、register0方法提交到eventLoop线程池中执行,这个时候会启动eventLoop中的线程。

    2、方法doRegister()才是最终Nio中的注册方法,方法javaChannel()获取ServerSocketChannel。

    太原php培训机构

    ServerSocketChannel注册完之后,通知pipeline执行fireChannelRegistered方法,pipeline中维护了handler链表,通过遍历链表,执行InBound类型handler的channelRegistered方法,最终执行init中添加的ChannelInitializer handler。

    太原php培训机构

    1、initChannel方法最终把ServerBootstrapAcceptor添加到ServerSocketChannel的pipeline,负责accept客户端请求。

    2、在pipeline中删除对应的handler。

    3、触发fireChannelRegistered方法,可以自定义handler的channelRegistered方法。

    到目前为止,ServerSocketChannel完成了初始化并注册到seletor上,启动线程执行selector.select()方法准备接受客户端请求。

    细心的同学已经发现,ServerSocketChannel的socket还未绑定到指定端口,那么这一块Netty是如何实现的?

    Netty把注册操作放到eventLoop中执行。

    太原php培训

    太原php培训机构

    最终由unsafe实现端口的bind操作。

    太原php培训机构

    bind完成后,且ServerSocketChannel也已经注册完成,则触发pipeline的fireChannelActive方法,所以在这里可以自定义fireChannelActive方法,默认执行tail的fireChannelActive。

    太原php培训机构

    channel.read()方法会触发pipeline的行为:

    太原php培训机构

    最终会在pipeline中找到handler执行read方法,默认是head。

    至此为止,server已经启动完成。

    END。

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

下一篇:太原php培训班:LOL设计模式之「策略模式」

最新开班日期  |  更多

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

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

开班日期:06.30

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

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

开班日期:06.30

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

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

开班日期:06.30

高级开发工程师精品班

高级开发工程师精品班

开班日期:06.30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:0351-5608878     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56