CooCare 服务器版本日志 - housekeeper-software/coocare GitHub Wiki

Ver:4.0.0.2136 (2021/6/24 12:00)

1.review UserCenter, ServiceCenter,MessageRouter代码,对其中诸多细节进行优化。  
2.工程师批量查询用户在线状态,可能会返回部分结果,需要客户端自行处理这种情况。某些用户不在返回的集合中,则表示系统中没找到,可以理解为离线。  
3.连接标识改为uint64_t,应该不会有溢出的可能性  
4.不建议使用 * 查询所有工程师,未来可能会移除此功能,以便更好的优化检索性能。  
5.转发的消息和推送的消息都在redis中存储,以便调试。生产环境可以通过配置禁止存储。  
6.加速死连接的销毁,缩短在最长2s之内完成。  
7.将seq生成时间调整为收到登录请求时,这样避免负载均衡无谓消耗seq。  

Ver:4.0.0.2137 (2021/6/25 8:00)

1.优化一些细节,增加一些调试信息  
  ./usercenter --cmd=user 返回各个MSP在线的工程师数量   
2.终端查询工程师或者用户,如果不在线,则尽量返回可推送的登录信息。  

Ver:4.0.0.2594 (2021/12/15 8:00)

1.Libwebsockets使用libevent作为外部消息循环,避免轮询,提高响应效率  

Ver:4.0.0.2193 (2021/7/8 17:00)

1.重新设计了离线消息机制,具体见wiki说明  
2.将新版本协议版本号升级为2,以便支持离线消息  

Ver:4.0.0.2505 (2021/11/28 17:00)

1.支持 AES256加密方式
2.协议版本号升级到3,以支持新的加密方式

Ver:4.0.0.2594 (2021/12/15 17:00)

1.libwebsockets 使用外部消息循环 libevent,具体参考: 
https://github.com/housekeeper-software/tech/wiki/Libwebsocket-lws_service-%E9%98%BB%E5%A1%9E

Ver:1.0.0.3370 (2022/12/02 09:49)

此版本编译时间为:2022-12-02 09:19:04,并且大版本号回归到1.0.0,这是编译服务器迁移之后忘记修改主版本号所致,不影响功能。 
并且所有代码迁移到V3目录。   
可以在服务器上执行如下命令查看版本信息:   
docker exec -it servicecenter /bin/bash
./servicecenter --version  
其他容器同理。  

1. 主要的修改是增加 engineerproxy和 rabbitmq 组件,使之后端收发消息更加简单高效。  
2. 增加用户给工程师的消息离线存储。 
3. relogin命令,在control字段增加了如同 kickout一样的信息,表明终端在哪里登录。
4. 消息一旦存入redis,ack消息中offline=true
5. 登录时,服务器会将离线消息逐条转发给客户端。并置offline=true。V3版本,服务器会将超过100条的离线消息删除早期的,只保留最新的100条转发给客户端。
6. 配置文件格式全部更换了。在v3/docker/docker-compose目录下可以看到模板。docker-compose环境变量也有一些更改。
7. 移除了rabbitmq system_event通道。engineerproxy会将转发失败的消息,比如转发给通讯服务器,或者从通讯服务器转发给rabbitmq记录在数据库中。
8. 通过docker-compose启动之后,在 /usr/local/coocare/各个项目的目录下的log目录,保存当前使用的配置,名字都叫 current.json。该目录还包含一个 restart.txt,记录容器自动重启的时间
9. 工程师端收到消息须立即发送回执,以便服务器删除消息缓存。  
10. 重新实现了websocket连接,代码源自 android 源码仓库中的 cuttlefish(https://android.googlesource.com/device/google/cuttlefish/+/refs/heads/android13-platform-release)  
11. 重新实现了异步 HttpRequest,代码源自 chromeos ,仓库在(https://chromium.googlesource.com/chromiumos/platform2/+/refs/heads/firmware-celes-7287.92.B/) 
12. 将通用代码提取到 common目录下。  
13. 重新实现TimingWheel,快速哈希算法
14. 实现对代理协议(HAProxy procotol V1,V2)的自动支持,无需配置(以前需要配置指定是否支持代理协议),HAproxy protocol主要用于在负载均衡后端可以获得连接的真实IP。  
15. C++版本最低为17。低于此版本将无法编译。  
16. TCP连接的心跳超时改成5分钟,websocket超时设置为100秒。内存回收频率改成1小时。对于TCP心跳包,客户端需要在5分钟内发3~4此心跳包。 websocket连接,客户端可设置为  
    30秒发一次PING包。
17. 但凡数据库的地方都改成自动创建数据库和表(如果账号权限足够创建数据库的话)  
18. 构建容器时,servicecenter和所有的usercenter tcp和websocket 内部侦听端口都一样。

Ver:1.0.0.3375 (2022/12/04 09:49)

编译时间: 2022-12-04 09:00:56
1. 修复一个连接快速断开的bug,当收到终端的登陆包之后,转发给任务处理线程。在任务处理线程返回之前,连接已经断开。此刻会导致此连接未能从用户管理中清除。
   原因是此前通过是否已经登录判断是否发送离线通知。此版本修复此问题:只要收到了登陆包,不管是否处理完成都会发送离线通知给任务线程处理。  
   对于之前的版本,可以通过限制负载均衡的连接数重现此问题。将连接数限制到某个范围,然后以超过此范围的连接开始登录。超过的部分将保持在负载均衡中。此刻断开所有客户端连接,  
   已经登录的连接开始掉线关闭,此刻负载均衡又送入一批新的pending中的连接进来,服务器处理了登录包,但很快这个连接就断开,最终发现UserManager中的用户数并不会为0,但实际上所有连接已经断开。  

Ver:1.0.0.3377 (2022/12/05 00:00)

编译时间: 2022-12-05 07:36:53
1. 如果客户端登录没有指定状态,比如在线,隐身,强制为在线。  

Ver:1.0.0.3408 (2022/12/20 09:22)

编译时间: 2022-12-20 09:22:44
1. 移除xxhash第三方库
2. 集成google abseil-cpp-20220623.1 (https://abseil.io/)
3. 将stl map/set替换为 absl::flat_hash_map, flat_hash_set,速度是标准库的一倍。
4. 提供一个高效的ID自增生成服务器,类似redis自增键,但可以离线存储。接口使用 ZeroMQ,详见([wiki](https://github.com/housekeeper-software/coocare/wiki/ID%E8%87%AA%E5%A2%9E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8D%8F%E8%AE%AE))   

Ver:1.0.0.3412 (2022/12/21 08:50)

编译时间: 2022-12-21 08:36:25
1. 将原先得 CFLAGS= -march=native 改成 -msse -msse2 -mssse3 -msse4.1 -msse4.2,native编译出来的在低端PC上无法运行,因为不支持编译机的高级指令。 
   ABSL 需要用到 -msse -msse2 -mssse3 -msse4.1 -msse4.2,对hash的一些指令集优化