以前都是在自己的域名下写文章,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,它的功能类主要用于异步操作的通知回调。
先写到这里,下班去吃饭。
有时我们选择改变,并非经过深思熟虑,而更像是听见了天地间冥冥中的呼唤,