文章目录

  • 背景
  • 模块简介
  • 运行效果
  • 服务端
  • 客户端
  • 断开客户端
  • 代码走读
  • 添加工厂类的扫描spring.factories
  • 添加bean生成类
  • 添加获取配置属性的类
  • 评价


背景

近期有计划实现手动实现一下rpc远程调用的功能,主要用到spring boot、netty、zookeeper。
本博客是第一步,利用spring boot、netty实现长连接通讯。
代码托管到了gitee:
服务端:https://gitee.com/simple_projects/simple_dubbo_provider/tree/v.1.0.0
客户端:https://gitee.com/simple_projects/simple-dubbo-consumer/tree/v.1.0.0

模块简介

java springboot 数据连接超时时间设置 springboot长连接_spring boot

  • server模块由服务端代码实现,程序会绑定和监听本地配置的端口
  • client模块由客户端代码实现,程序主动连接配置的服务端host和port,连接成功之后,周期性的发送type为12的类型的数据包

运行效果

服务端

java springboot 数据连接超时时间设置 springboot长连接_客户端_02


查看端口情况:

netstat -nat | grep 8080

java springboot 数据连接超时时间设置 springboot长连接_服务端_03

客户端

java springboot 数据连接超时时间设置 springboot长连接_服务端_04


查看端口情况(可以看到,服务端的8080端口状态变成了established,客户端也是)

java springboot 数据连接超时时间设置 springboot长连接_客户端_05

断开客户端

查看端口情况,客户端的临时端口没有立刻关闭,而是处于time_wait的状态

java springboot 数据连接超时时间设置 springboot长连接_spring_06

代码走读

Server和Client的Bean需要装载到spring,而且Server和Client需要设置端口和host,必然要走Configuration的过程。

  • 添加spring.factories
  • 添加NettyServerAutoConfiguration等配置类,这个类不像@Component(在实例化bean的时候不考虑参数),可以读取application.yml里面的配置,然后再生成bean
  • 添加xxxxProperties类,用于承接spring boot的配置信息
  • 在MyApplicationRunner中进行启动后的相关事宜(服务端需要进行server的run,客户端为了测试方便,直接起了一个线程,重复的发送数据包)

下面以Server端的代码截图来举例

添加工厂类的扫描spring.factories

java springboot 数据连接超时时间设置 springboot长连接_spring_07

添加bean生成类

java springboot 数据连接超时时间设置 springboot长连接_spring boot_08

添加获取配置属性的类

java springboot 数据连接超时时间设置 springboot长连接_服务端_09

评价

  • 本次没有对代码进行详细的注释,见谅(之后的博客会对netty做详细的解读)