一个可以用来学习 Netty 的相当精简的样例项目,它演示了该如何在实际网络开发中完成基础的协议约定、 协议解析和组包拆包工作,在项目中还实现了断线重连和心跳检测机制,除此之外,还有连接白名 单和动态处理器的实现。
近两年连续参与了好几个物联网的项目,几乎都用到了Netty
,回想自己在网络编程这条路上的探索过程,可谓
是相当的崎岖,尤其是在刚开始的那个阶段,苦于找不到一个完善又相对简单的样例项目。 刚好近期整理项目资料
时,发现其中一个智慧运维的项目很适合用来当做学习案例,所以就有了这个项目。当然,为了让项目看起来浅显
易懂,我剔除了大量与本项目无关的功能,仅保留了非常小的一部分功能作为演示。
server
方维护了一份服务器清单,该清单描述了服务器的IP地址、名称等信息;client
方作为客户端应用
程序部署在服务器上,负责向server
方上报数据和执行server
方下发的指令。
sequenceDiagram
client ->> server: 创建连接
client ->> + server: 发起认证请求
server ->> - server: 白名单检查
server -->> client: 认证结果
server ->> + client: 下发配置信息
client ->> - client: 创建计划任务
loop 计划任务
client ->> + server: 上报数据
activate client
server ->> - server: 存储数据
client ->> client: 等待下一次任务
deactivate client
end
client
在与server
成功建立连接后,将立马发起 认证请求server
收到认证请求后,检查client
是否在服务器清单内,并立即返回 认证结果,如果认证成功,还会向client
下发该服务器的配置信息client
收到配置信息后,根据配置内容在本地创建计划任务,定时向server
上报所收集到的数据
sequenceDiagram
user ->> + server: 提交指令
server ->> - server: 创建指令记录
server ->> + client: 下发指令
client ->> - client: 执行
client -->> + server: 上报执行结果
server ->> - server: 更新执行结果
user
通过接口 post:: /server/exec/order/{id} 向server
提交指令server
将该指令转发给对应的client
进行执行client
执行完毕后,向server
上报指令执行结果
启动服务端ServerApplication,服务端为 SpringBoot 应用,启动了两个端口,包括 Web 端口 server.port和 Socket 端口 ops.server.port。
调用接口 post:: /server/add, 向服务端注册客户端的IP、名称等信息,这些信息将在客户端连接服务端时被使用。如下是一个请求示例:
POST http://localhost:port/server/add
Content-Type: application/json
{
"name": "My-Server",
"ip": "127.0.0.1"
}
启动客户端Launcher。
此项目仅仅只是一个样例,后续作者将不不会再对其维护。如果你对该项目有疑问,可以在 issue中留下评论。