240717班级,工业化控制系统,煤矿相关行业,昆仑系统
wangky
2024-11-09 c9e6304b151d776225c76ed806db50bf678416d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
 
[MySQL]
数据库封装:[子服务]
 
    1、写一个类:[设计模式:单例]
        增删改查接口[公有]
        连接、释放的接口[私有]
        
    2、考虑性能--SQL连接池[类]--[原理和线程池类似]--复用sql连接
        -- 起到提升性能的作用
        连接数量:最大、最小
        波动算法:最小--最大--最小
        
建库--一个库
    建表--:所有用到数据库的表,都给你汇总到一起
    --合并类似或者相同的表的字段
    
备份导出--shell脚本自动定时导出
安全防注入校验:参数化、正则匹配等
    体现:写一个接口,给所有执行数据库sql语句的地方进行校验
    
    
    
    
    
===================================================
        版本管理--自动更新(版本)
        
        管理:属于服务端的功能
        
        自动更新:属于客户端的功能
        ----------------
        方式:增量更新、全量更新
        ----------------
        管理:也需要一个UI--方便提交更新的文件[可执行文件、库文件、配置文件等]
              提交文件--文件写到磁盘--相关信息记录到数据库
              文件上传
              执行数据库插入语句
             ----------------------
             文件信息:文件名、大小、目录[写到服务端的目录、客户端真正的相对目录]、文件MD5值[校验文件完整性]
             
             版本信息:当前版本号[新版本]、依赖版本[老版本]
             
             额外信息:更新时间、更新描述等
        
        ----------------
        结构体:要用到不定长数组--文件内容是变化的、长度不确定
        ---------------
        ===================================================
        日志相关
        
        1、数据输出:日志文件、日志数据表
        
        2、类:日志的类--按级别做一个调用
               同一个接口--使用函数宏--分级别去使用--最终使用:只需要传 日志描述[字符串]
               
               其他的参数,使用宏来取代
               ------------------
        3、文件变大--要翻滚--解决超大文件不能直接打开的问题
            翻滚算法:时间戳 或者 id
            
        4、定时备份导出:shell脚本自动定时导出
        
        5、性能:都写到同一个文件的情况下,是异步写入还是同步写入?
            准备一个队列,把所有的写入操作变成一个写入任务,进入队列之后,排队写入
            --使用异步的方式,给业务节约了等待时间
        -------------------------------
        ===============================================
        配置管理--以配置文件的形式来存储配置的内容--xml文件
        
        服务端有啥:网络通信、数据库、日志、版本管理、配置管理等 
        --------------------内容
        网络通信:ip、port、心跳保活时长:间隔时长、轮次、是否启用心跳检测
        
        数据库:host、port、数据库名、用户名、密码
        
        日志:文件存储路径、文件大小
        
        版本管理:存放版本文件的根目录
        
        配置管理:冷启动、热启动
        --------------------
        使用xml的库:tinyxml2   : tinyxml2.h   tinyxml2.cpp 
        
            对xml文件解析,如存为 config.xml ,解析里面包含的字段就行
        --------------------
        <?xml version="1.0" encoding="utf-8"?>
        <socket ip="0.0.0.0" port="16888" heartCheck="true" heartTimes="6" heartSleep="5000">  </socket>
        <MySQL>  </MySQL>
        <log> 
            <path>./log</path>
            <size>100M</size>
        </log>
        <version>  </version>
        <config>  </config>
        
        ------------------ 主要是读取里面的数据
        提供内容:全局提供对象,懒汉模式取,饿汉模式赋值
        ------------------
        使用时机:
            1、懒汉模式,随时获取
            2、饿汉模式,需要在主函数第一行就开始跑起来
        ------------------
        要起一条线程,来负责监控 config.xml文件有没有被修改,发现修改,需要更新修改的内容
        更新操作:1、非网络相关的子服务,可以直接热启动
                  2、网络相关的子服务,就得冷启动[重启整个exe]
        
        冷启动的操作,可能需要守护进程来管理
        ----------------------
        ==========================================
        socket 
        1、TCP 协议 
        2、通信类[S端]、客户端只需要收包、解包
        3、性能:多线程-->线程池
            [IO复用] select、poll、epoll 模型[3个里面的一个]
        4、业务基类--统一定好所有业务的接口
        -------------
        其他:粘包处理、心跳检测等
        ------------------
        自定义协议:要对结构体--提炼--且统一功能type--用枚举来统一
        ------------------
        ==================================
        协议适配:
            统一数据--底层协议不同
            
            json格式--支持不同语言的开发:web[html]\C++
            自定义结构体格式  C/C++
            -------------------
            2个地方可以适配:
            不同数据格式的适配--应用层的协议
            不同协议:更底层的:tcp、udp、rs485等
            -------------------
            
        使用特定的标志来标识响应的协议
        =========================================
        客户端:
        ------------------
        日志查询:
            查询log记录[数据库中的日志表]--展示到前端界面--分析
            ----------
            查询条件:
                级别、关键字、时间段等
                不同条件查到内容不一样--柔性数组来表示 
                    LogInfo 结构体 ,包含了log表所有字段
                    用数组表示N行
            
            显示结果:
                显示的时候,要考虑量级的问题
                就得使用分页算法来处理,分页显示
                ----
                服务端:默认返回第一页的内容,每页条数可以设定,默认100条
                        也可以指定页码获取数据,返回
                客户端:使用分页机制,只显示特定的分页数据,想看更多数据
                        点相应的页面按钮就可以查看
                        
        ---------------------------------
        版本更新
            基于版本管理提供的版本信息,来进行更新
            
            方式:手动更新、自动更新 
            
            更新选择:增量更新、全量更新
                看总大小的区别,选择小的
            
            操作:主要是下载最新版的内容,到客户端来,进行覆盖或者新增
                
            更新程序:update.exe 来对主程序进行更新
            
            逻辑:update.exe 启动需要主程序来启动,发现新版了才启动
                启动之后,update.exe进行版本的下载,覆盖等,完成之后,
                再把主程序启动
            
            小逻辑:
                增量更新:
                    当前版本号--下一个版本--变化的文件--逐个下载,覆盖 
                    --更新版本号--在把当前版本往下递归
                    --直到更新到最新版--再启动主程序
                全量更新:下载最新版的安装包--安装--启动 
            
            当前版本号:本地得有一个版本号的记录文件,可以是txt、xml、ini等方式
                        
        =================================
        地图标注
            百度地图--API--HTML-JS
            
            JS--Qt交互:webChannel.js 
            ---------------------
        ====================================
        系统设置:
            客户端的界面相关:外观--风格、字体
            翻译:中文、英文等
            快捷键:功能和快捷键绑定
        =====================================
            注册:默认是最小权限的用户
            
            登录:成功--根据不同的权限来显示不同的字界面
            
            ---------
            输入校验:
                非法字符、长度 
            --------------
            安全:密码加密--解密的处理
            --------------------------------
            =======================
            警报提示
                要给所有在线的用户-发送警报提示
                
            =========================
            权限管理
                先查询--支持模糊匹配--再显示--用表格--右键菜单--修改权限
                
            ------------------------