
更新要点
为DatabaseClient配置了一个负责重连的异步守护线程
完成了DatabaseClient和HTTPServer的解耦合
为每一个数据库客户端接口的异常处理处加入了被动检测连接状态
异步线程循环中加入了计数器,能够定时自动触发连接状态检测
解决了查询订单列表时导致客户端崩溃的问题
为什么引入守护线程原先的数据库连接更多的偏向于能用就行的实验性功能,这导致了一个很严重的问题:
数据库连接不稳定,以及只连接一次数据库,导致断连之后只能通过重启整个容器的方式重新连接,运维成本过高
因此我们引入守护线程,专门异步地负责数据库的重连。这样就能大大提高数据库连接的健壮性。
代码结构解耦合原先嵌入在HTTPServer内的initDB()接口暴露了DatabaseClient内的init()接口参数,导致这两个类的耦合度过高,一旦修改init()接口的参数,initDB也要跟着修改,这已经是非常明显的因为耦合度过高所造成的问题了,为此要通过修改代码的方式实现二者的解耦合
这里我们采用最简单的方法解耦合:
将原先的DatabaseClient db改为智能指针类型std::sha ...