|
[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
|
---------------------
|
====================================
|
系统设置:
|
客户端的界面相关:外观--风格、字体
|
翻译:中文、英文等
|
快捷键:功能和快捷键绑定
|
=====================================
|
注册:默认是最小权限的用户
|
|
登录:成功--根据不同的权限来显示不同的字界面
|
|
---------
|
输入校验:
|
非法字符、长度
|
--------------
|
安全:密码加密--解密的处理
|
--------------------------------
|
=======================
|
警报提示
|
要给所有在线的用户-发送警报提示
|
|
=========================
|
权限管理
|
先查询--支持模糊匹配--再显示--用表格--右键菜单--修改权限
|
|
------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|