nackily / ops-demo

A project to demonstrate how to use netty.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

About ops-demo

一个可以用来学习 Netty 的相当精简的样例项目,它演示了该如何在实际网络开发中完成基础的协议约定协议解析组包拆包工作,在项目中还实现了断线重连心跳检测机制,除此之外,还有连接白名 单动态处理器的实现。

背景

近两年连续参与了好几个物联网的项目,几乎都用到了Netty,回想自己在网络编程这条路上的探索过程,可谓 是相当的崎岖,尤其是在刚开始的那个阶段,苦于找不到一个完善又相对简单的样例项目。 刚好近期整理项目资料 时,发现其中一个智慧运维的项目很适合用来当做学习案例,所以就有了这个项目。当然,为了让项目看起来浅显 易懂,我剔除了大量与本项目无关的功能,仅保留了非常小的一部分功能作为演示。

流程简述

server方维护了一份服务器清单,该清单描述了服务器的IP地址、名称等信息;client方作为客户端应用 程序部署在服务器上,负责向server方上报数据和执行server方下发的指令。

(1) 数据上报

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

Loading
  • client在与server成功建立连接后,将立马发起 认证请求
  • server收到认证请求后,检查client是否在服务器清单内,并立即返回 认证结果,如果认证成功,还会向 client下发该服务器的配置信息
  • client收到配置信息后,根据配置内容在本地创建计划任务,定时向server上报所收集到的数据

(2) 指令执行

sequenceDiagram
user ->> + server: 提交指令
server ->> - server: 创建指令记录
server ->> + client: 下发指令
client ->> - client: 执行
client -->> + server: 上报执行结果
server ->> - server: 更新执行结果
Loading
  • user通过接口 post:: /server/exec/order/{id}server提交指令
  • server将该指令转发给对应的client进行执行
  • client执行完毕后,向server上报指令执行结果

快速开始

Step 1: 启动 server

启动服务端ServerApplication,服务端为 SpringBoot 应用,启动了两个端口,包括 Web 端口 server.port和 Socket 端口 ops.server.port

Step 2: 添加白名单

调用接口 post:: /server/add, 向服务端注册客户端的IP、名称等信息,这些信息将在客户端连接服务端时被使用。如下是一个请求示例:

POST http://localhost:port/server/add
Content-Type: application/json

{
  "name": "My-Server",
  "ip": "127.0.0.1"
}

Step 3: 启动 client

启动客户端Launcher

更多

此项目仅仅只是一个样例,后续作者将不不会再对其维护。如果你对该项目有疑问,可以在 issue中留下评论。

About

A project to demonstrate how to use netty.

License:Apache License 2.0


Languages

Language:Java 100.0%