继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Netty 源码阅读入门实战(二)-Netty 基本组件

胡说叔叔
关注TA
已关注
手记 324
粉丝 129
获赞 581

1 一个简单的socket例子

  • 无 netty 前编写的代码


    5bcedfda000112b410000624.jpg


    5bcedfdb00011fee10000771.jpg


    5bcedfdd0001a87f10000830.jpg


    5bcedfde0001b9fc10000776.jpg


    传统的HTTP服务器的原理创建一个ServerSocket

  • 监听并绑定一个端口一系列客户端来请求这个端口服务器使用Accept,获得一个来自客户端的Socket连接对象

  • 启动一个新线程处理连接读Socket,

    • 得到字节流解码协议

    • 得到Http请求对象处理Http请求

    • 得到一个结果

    • 封装成一个HttpResponse对象编码协议

    • 将结果序列化字节流写Socket,

    • 将字节流发给客户端

  • 继续循环步骤3

  • 流程

    • 服务端监听端口

    • 客户端会连接服务端

    • 客户端每次都会写数据,间歇5s

    • 服务端收到并写回客户端


      5bcedfdf00015cc710000643.jpg

      启动服务端


      5bcedfe000017d2610000956.jpg

      启动客户端


      5bcedfe20001188010000523.jpg

      流程图示

2 Netty对于socket的抽象

5bcedfe50001054010000514.jpg

3 Netty组件简单介绍

3.1 NioEventLoop

netty的发动机


5bcedfe6000136c210000202.jpg


5bcedfe70001bdeb10000375.jpg

Server 端的


1000

Client 端的


这些 while(true)就对应一个 run 方法

1000

NioEventLoop#run


1000


netty里有不同的io编程模型实现,以Nio为例,对io事件的处理是在NioEventLoop里做的,事件的注册,是下面的这个方法

1000


1000


不同的事件调用unsafe的不同方法,netty对底层socket的操作都是通过unsafe来做的
unsafe主要由两种不同的实现


  • NioMessageUnsafe

  • NioByteUnsafe

NioServerSocketChannel使用的是NioMessageUnsafe来做socket操作
NioSocketChannel使用NioByteUnsafe来做socket操作

1000

处理每一个连接


1000


1000

3.2 Channel

1000


1000

  • 以服务端的NioMessageUnsafe为例来看下read()方法的实现,对应是否有新连接进来的情况


    1000


    1000

    AbstractNioMessageChannel#doReadMessages


    1000

    NioServerSocketChannel#doReadMessages


    直接把底层的 channel 封装成 NioSocketChannel


    1000


    1000


    1000

3.3 ByteBuf

1000

3.4 Pipeline

1000


1000

小样例中对应内容,实际非常复杂


netty 将其抽象成逻辑链,看看 netty 是怎么把每个 pipeline 加入到客户端连接的


1000


1000


1000


1000


1000

3.5 ChannelHandler

1000


1000


1000



作者:芥末无疆sss
链接:https://www.jianshu.com/p/28d02aada6a9
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP