netty系列(三)client启动

client启动:

server是在bootstrap.bind的时候启动,而同样,client是在bootstrap.connect时启动,流程都是一样的:创建NioSocketChannel,和workgroup中的一个eventloop绑定起来,然后再执行connect。

笔记:connect操作和write操作一样,都是客户端主动调用,然后write事件被丢到netty,而网络可读可写等事件则是由netty自动接收然后初步处理后再丢到pipeline,然后pipeline中的handler再调用我们的程序,也就是说前者是由netty外到netty内,后者是由netty内到netty外。

再举个例子:read:如果selector中注册了read事件,那么就是netty会自动读取数据然后通知你,这是由内到外,而如果selector中没有注册read事件,比如在handler的read方法中设置autoread=false会导致selector移除read事件,此时你就必须手动调用channel.read去通知read读取,这就是由外到内即由客户端代码到netty框架

笔记:ChannelDuplexHandler里的各种操作比如read/connect/bind/disconnect,这些操作都是客户端主动调用的,由外到内,比如bootstracp.bind/bootstracp.connnet/channel.write等,调用时都是一个调用链,一般只在最后一个节点才真正执行这个操作,一旦中间某个handler没有继续调用super.xxx后者ctx.xxx(super.xxx一般是直接调用ctx.xxx),那么这个操作在这里就断了,就走不到最后执行的那个节点(一般是headContext),这样就不会真正执行这个操作。。。对于channelRead等事件处理方法,他是netty自动发送的的,由内到外,他是执行一个handler都执行一次事件处理。

BootStrap.connect
  BootStrap.doResolveAndConnect
    AbstractBootStrap.init
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值