您当前的位置: 首页 > 

水的精神

暂无认证

  • 2浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

我用发工资和女朋友的栗子讲明白netty中的核心组件

水的精神 发布时间:2021-06-25 06:12:54 ,浏览量:2

 看看netty为我们提供的核心组件
  1. channel:netty中把一个端到端的通信定义为了通道。所谓的端包含但不限于硬件设备,文件。这是对通信的第一层抽象。通道也是一个连接。
  2. 回调:这个回调是netty的一个机制,我用生活的栗子来解释。理解下边的一句话:"等发工资了,就买一个新手机;如果有女朋友了,就带她去吃好吃的"。其中买手机和带女盆友吃好吃的是预定好要做的事情,这就是netty中将要回调的事情。而发工资是事件驱动,如果不发工资,那么预定义好的事情都不能做。如果发工资这件事情发生了,那么就发生回调。在netty中,定义包含了回调的组件就是 ChannelHandle,真正的回调就是 ChannelHandle 中的channelActive()方法。这在netty里边就是,如果客户端连接就做什么。
  3. Future:未来结果的占位符。还是先用生活的栗子来将这个未来占位符的概念,其实不难懂。 就好比方买房子,你买之前肯定有计划打算,就买四居室,自己和女朋友住一间,父母住一间,并且打算好了要两个孩子,那就需要两个卧室。但是现在还没有孩子,你依旧预留好两间卧室。这就是未来的占位符,等有了孩子这件事情发生了,那么这个卧室就可以被用了。这也很好的体现了netty的基于事件驱动的思想,给异步非阻塞带来了可能性。这对应我们程序中的就是一个方法,调用另外一个方法,但是前者调用的方法定义好了拿到结果以后怎么做。并告诉被调用者怎么做。再举一个栗子,你想要给女朋友预定一个生日蛋糕,于是你去了蛋糕店,你跟老板说,给我来一个米其林蛋糕,如果做好了,送到 XXX。你调用了蛋糕店老板去完成做蛋糕的这个动作,并且定好了这个动作完成后执行的动作。JDK预置interface  java.util.concurrent.Future ,但是其所提供的实现,只允手动检查对应的操作是否已完成,或者一直阻塞直到它完成。这是非常繁琐的,所以Netty提供它自己的实现——ChannelFuture ,用与执行异步操作的时候用。
  4. 事件和channelHandle。事件又是怎么一回事呢,什么是netty中的事件?前边一直提到netty基于事件驱动。那么什么又是事件:举个栗子,还说上边发工资买新手机的栗子,其中买手机这个动作就是事件。考虑到扩展性,所有的动作成为是事件,实际上发了工资你不光能买手机,还能和同事出去撮一顿,还能买房子。那么对应程序中,处理业务逻辑,打印日志,等等操作就是事件,这些都由你来定义。而netty给我们实现好的事件就包括了:处理SSL,编码与解码。把要做的事情一件一件的列出来,然后放在channelHandle里边等着去执行。
关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0398s