太原PHP培训
达内太原php培训中心

0351-5608878

热门课程

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

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

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培训资源站

太原PHP编程开发并发编程槽与坑

Php开发规划自己的路

太原php培训老生常谈php

选择城市和中心
贵州省

广西省

海南省

台湾