一.Netty与Pigeon交互图

二.关键类解释

2.1 Server

Server是Pigeon对服务器的抽象,每个Server对应一个Netty的服务器,并负责处理该 Netty服 务器接收的所有请求

addService(); 该方法在服务启动流程中已经解释,通过addSerivce添加提供的服务 processRequest 提供处理请求的能力

2.2 NettyServer

NettyServer作为Pigeon服务的入口类,一方面 NettyServer通过继承实现了Server接口的AbstractServer拥有添加service和处理request的能力 ; 另一方面NettyServer通过持有bootstrap对象完成服务器的启动以及相关资源的管理。

ServerBootStrap是Netty提供的服务启动工具类,本质上就是开启了一个socket端口, channelFactory则是传入的channel工厂类。

NettyServerPipelineFactory则是封装Pigeon定制的协议处理流程.在Pipeline中完成了从字节流到request的过程

2.3 NettyServerPipelineFactory

pipeline处理流程

pipeline的模式设计是责任链和事件驱动的融合.

责任链类似于一个filter的过程,单纯的责任链模式要求handler保持单一的处理接口。通过加入事件驱动,就是将数据封装成一个个事件,并且后续handler的调用方法由前一个handler触发的事件决定。

比如handler1 接收到一个event2事件就会调用handleEvent2()方法,处理完成后调用fireEvent3触发一个event3事件,这个事件就会调用后续handler2的handleEvent3方法

三 Pigeon协议

Pigeon的通信协议全部可以在2.3中的handler链条中看到。

FramePrepender    简单的判断,拦截了一些非法的请求
FrameDecoder      完成tcp粘包的处理,以及版本之间的兼容
Crc32Handler      完成了数据完整性的校验
CompressHandler   数据的压缩和解压缩
ProviderDecoder   编码
NettyServerHandler将编码后的请求交给server处理

四.总结

NettyServer通过ServerBootStrap启动一个服务器,服务器每新建一个连接就会通过channelFactory创建一个channel , channel内的数据流经过handler责任链的处理,被序列化成为一个Request对象,在最后一个处理请求的NettyServerHandler中调用NettyServer的processRequest方法,从而完成一个网络请求到Pigeon服务调用的过程

Server的实例需要在handler使用,因此通过Server接口,将Netty相关的部分隔离开。

Pigeon中的Netty应用相关推荐

  1. netty的使用场景,线程模型以及如何在springboot中使用netty?

    文章目录 1. 为什么使用netty? 2. netty的线程模型 3. 在springboot中使用netty 4. netty的核心API解释 5. netty中的ByteBuf 1. 为什么使用 ...

  2. 透彻,在SpringBoot项目中使用Netty实现远程调用

    今日推荐Spring新版本抛弃JVM,可独立部署,网友:要自立门户???国内大神成功给手机装上了 Win11,代码已开源!Fluent Mybatis 牛逼!Nginx 常用配置清单这玩意比Threa ...

  3. 关于netty的中nettyio.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1异常排除

    通常引起异常的原因是因为netty的计数的机制, 在服务器收到CloseWebSocketFrame后,SimpleChannelInboundHandler调用release时,会触发CloseWe ...

  4. WebSocket 中的Netty

    测试Channelhandler EmbeddedChannel提供了下面一些方法: writeInbound(Object...),写一个消息到入站通道 writeOutbound(Object.. ...

  5. Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)

    场景 Netty的Socket编程详解-搭建服务端与客户端并进行数据传输: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1086 ...

  6. Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍

    场景 什么是Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是基于 Java NIO 的异步事件驱动 ...

  7. netty系列之:在netty中处理CORS

    文章目录 简介 服务端的CORS配置 CorsConfigBuilder CorsHandler netty对cors的支持 总结 简介 CORS的全称是跨域资源共享,他是一个基于HTTP-heade ...

  8. netty结合java_在SpringBoot中整合使用Netty框架的详细教程

    Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty与SpringBoot的整合,我想无非就是要整合 ...

  9. 在SpringBoot中整合使用Netty框架提供WebSocket服务

    在SpringBoot中整合使用Netty框架 Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty ...

  10. 在SpringBoot中整合使用Netty框架

    Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty与SpringBoot的整合,我想无非就是要整合 ...

最新文章

  1. jdbc就是这么简单
  2. markdown怎么输入指数、幂、次方、上下标?(2^8^=256、a~0~=1)
  3. 1 access中iif函数中的_JavaScript中的高阶函数
  4. 佳能单反相机二次开发包介绍_家用单反相机什么牌子好
  5. 七招挽回受损WORD文档
  6. mysql按年创建分区表,增加分区表,删除分区表,实战练习
  7. Linux与Ubuntu上SQL Server 2019
  8. 从主流安全开发框架看软件供应链安全保障的落地
  9. Python 初始篇
  10. Android基础知识之智能指针:强指针和弱指针
  11. 黑客,计算机革命的英雄!
  12. netbeans写登录界面java_NetBeans 界面美化与字体设置
  13. 【C语言】04-函数
  14. 网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取
  15. visual basic_什么是Visual Basic?
  16. adb命令刷机vivox20_刷机常用adb命令及刷recovery脚本
  17. Element表格序号问题
  18. java中的IO整理(转)
  19. 【成功解决】Ubuntu下U盘文件夹不存在
  20. Mapped Statements collection already contains value for xxx

热门文章

  1. 波士顿大学大都会学院计算机硕士,【陈彩瑛】波士顿大学大都会学院商科专业介绍...
  2. 手把手教你App推广时如何能找到100个以上渠道!
  3. apk编辑器android源码,apk编辑器电脑版_apk编辑器电脑版下载[apk编译]- 下载之家
  4. openpyxl给excel设置条件格式
  5. Java日志体系(三) jul 配置文件详解,日志示例
  6. Questa sim使用常见报错汇总
  7. linux的文件保护,如何在Linux中保护文件和目录免遭删除
  8. C语言中pow()指数函数的使用问题简述
  9. cortex-m3/m4栈回溯
  10. Python - poetry(4)管理环境