# miao **Repository Path**: ling1314/origin-utility ## Basic Information - **Project Name**: miao - **Description**: miao 主服务 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-07-04 - **Last Updated**: 2024-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 新增设计备忘录 2022-08-11 关于主机服务,添加一个通信程序,负责采集主机信息(原IDP功能),同时配合主程序,分摊host-server的功能。允许 手工添加主机和自动注册主机。手工添加的没有额外功能,自动注册的可以查看相关监控信息,同时可以能发布维护指令。 2022-08-11 应用添加中添加一个逻辑,可以手工添加应用和通过主机上报的信息发布应用。手工添加的应用只能通过添加时写入的方式打开。 通过主机发布的应用在发布环境要求用户勾选一些信息,例如协议,是否为桌面,连接端口等。通过主机发布的应用在发布时写入 map_app_host 表,打开应用时可以使用负载均衡算法。 -- 也就是说系统中需要添加一个完整的注册和信息监控模块 -- 2023-05-02 添加云应用相关模块,增加如下设计: 1. 一个用户只能归属一个部门,如果账户是管理员就能显示管理页面,如果是用户就只能显示云应用页面。 2. 管理员不能管理管理员,只有超级管理员才能管理管理员,而且超级管理员可以管理所有账户。 3. 集群由谁创建就由谁管理,超级管理员可以管理所有集群。 4. 集群不需要和部门关联,用户直接面对的是应用。因此应用发布时如果选择部门就等同于做了部门映射, 如果勾选个人就是个人应用,如果是全局就是对全局发布。 5. 一台主机只能归属一个集群,所有主机默认都在1号集群中。 6. 用户能看到的应用范围为:个人应用+部门应用+全局应用。管理员能管理的集群范围就只是自己创建的集群。 集群删除时云应用会被删除,相关会话也会被强制关闭。 7. 系统提供角色模块,但是角色只是控制api接口的权限。用户表中还提供一个 AccountLv,不同账户级别能获取的数据范围不同。 这种方式虽然会侵入代码逻辑,但是便于理解,减少代码量(接口共用,不然还需要额外写一个root接口) 2023-05-21 调整登录认证方式,用户登录时会在返回token的同时写入一个 cookie (用户的账户MD5值),前端请求时可以使用 cookie 或者 jwt令牌来验证身份。 2023-08-31 种一棵树最好的时机是10年前,其次是现在。不要总想着先磨刀,人生往往是多线程的,边走边磨也未尝不可。 先完成客户端插件的开发,然后guacd在go这边的多会话保持,然后再弄ws页面通过虚拟通道或者请求等方式在桌面中拉起新的页面。 2023-09-11 添加多会话控制管理。应用主机始终开启多用户多会话,每次请求时通过tunnelMap判断是否需要去创建一个新的桌面会话。 2023-09-13 添加一个会话监听程序,它会被rdp会话拉起,运行在用户空间下。需要打开应用时前端通过虚拟通道将消息发送给它,由它来执行。 同时它还要负责监听用户消息,例如绑定会话,执行指令等等。 状态初步设定为: 创建 - 点击应用时创建会话记录 初始化 - ws 连接连接时更新会话状态 绑定win会话ID - 虚拟通道读取到win会话ID是更新状态,虚拟通道会再rdp连接时完成监听,然后发送winID 打开应用 - 页面通过虚拟通道接收到win ID后给虚拟通道发送应用打开信息,然后应用打开,回复页面打开成功。然后更新会话状态。(这里可以拆分为 准备打开 和完成打开,是否拆分看情况决定) 会话断开 - ws断开,当前设定下tunnel会一直握持连接,这种状态下的会话还能连接回去,而且连接非常丝滑,非常快。这种状态的会话可以复用。 win会话断开 - 这不是一个正常的状态,握手设计下不应该出现这种情况。这些会话应该被自动销毁。需要思考下销毁逻辑和可能存在的影响 准备注销win会话 - 页面点击注销按钮,通过tcp发送注销信号,host-service通过wts注销会话。 通过tcp发送注销信号时将会话状态修改为该状态,此时的会话被锁定,与被注销一样, 因为这个时间非常短,服务器不卡的情况下通常1秒不到。 完成win会话注销 - 通过wts完成注销会话操作后会通过tcp再发送一次消息给main,main收到消息后将状态修改为这个状态。代表一次会话的彻底完结。 #### 备忘录 host-session model 添加了,需要将其替换到temainl ws中,用来替换原来的session ##### 计划表 - 1.完成基础框架搭建 - - 1.1 配置文件(ok) - - 1.2 日志(ok) - - 1.2 多数据库适配(ok) - - 1.2 redis 工具类,不一定会使用 - - 1.2 jwt中间件 - - 1.2 gin关于 grom 错误处理的中间件 - - 1.2 gorm 关于 err的返回,几个常用函数的返回差异(ok) - - 1.2 page和result的封装(关于go的继承问题) #### 开发规范 2023-05-02 - dao层方法名定义规则,参考java spring orm 定义规则,简单明了的方式。 ```text Find FindByID FindOne FindAll FindAllWithPage Create Update UpdateMany Delete DeleteMany ``` 复杂逻辑命名规则,比如统计相关,可以自己命名,但必须有注释。 复杂业务设计多个表联合操作,必须使用事务处理。参考语雀。