netty5与spring集成,实现配置启动

以前都是在自己的域名下写文章,CSDN开篇第一文献上自己的一个小小DEMO项目

首先要感谢鑫鑫哥哥,您的文章给了我最初的入门

附传送门:

同时,最关键的参考书:

netty权威指南,文中部分文字摘自此书

============================以下是正文内容===============================================

项目需求:

1.使用netty实现可配置化的NIO通讯服务器

2.要求支持多种通讯协议以及长短链接,如http,https,TCP,TLS,MQTT等

3.支持私有协议拓展开发

以上因为是个人demo项目,所以未做其他方面的需求,比如压力测试,集群部署等,这些自己也需要在下下个阶段继续研究(下个阶段主要研究dubbo和完善自己的demo项目)。

1.Main类

首先我们少不了一个Main类,这个是netty启动的类,直接看代码。

这里在启动main方法的时候会首先去加载spring配置文件,同时保存context。期间应用了一个systemInfo对象为该系统的系统配置

systemInfo里面涵盖了多个构造函数,这个在后面会有解释(想通过spring直接配置系统参数),目前有个更好的想法就是通过配置map去完成配置系统参数,但是目前还没改好,改好以后会更新代码。

IServer为server接口

我们的实现类

在我们的实现类中,start方法和stop方法最终都会调用systemInfo的shutDownGracefully以便释放资源。其中start当中会等待服务端链路关闭以后main函数才退出。

2.几个工厂

先看代码

channel工厂

ServerBootStrap工厂

以上是两个关键类

在ServerBootstrapFactory中

我们创建了两个NioEventLoopGroup实例。NioEventLoopGroup是一个多线程的I/O操作事件循环池,Netty为各种传输方式提供了多种EventLoopGroup的实现。NioEventLoopGroup专门用于网络事件的处理,实际上它们就是Reactor线程组。这里创建两个的原因是一个用于服务端接受客服端的链接,另一个用于进行SocketChannel的网络读写。

我们还在ServerBootstrapFactory中创建了ServerBootstrap对象,它是netty用于启动NIO服务端的辅助启动类,目的是降低服务端的开发复杂度。

传送门,讲解ServerBootstrap工作原理

接下来我们调用了ServerBootstrap的group方法,将两个NIO线程组当作入参传递到ServerBootstrap,借着设置创建的channel类型为NioServerSocketChannel,他的功能是监听网络事件类型并创建channel。

在ServerChannelFactory中

我们对ServerBootstrap绑定了I/O事件的处理类,它的作用类似于Reactor当中的handler,主要用于处理网络是I/O事件,例如记录日志、对消息进行编解码等。

ServerBootstrap配置完成以后,,调用它的bind方法绑定监听端口,随后,调用它的同步阻塞方法sync等待绑定完成。完成之后netty会返回一个channelFuture,它的功能类主要用于异步操作的通知回调。

先写到这里,下班去吃饭。

有时我们选择改变,并非经过深思熟虑,而更像是听见了天地间冥冥中的呼唤,

netty5与spring集成,实现配置启动

相关文章:

你感兴趣的文章:

标签云: