今天开始想更新一个C++项目,实现一个支持跨服务器通信、支持负载均衡的集群聊天服务器项目。项目会应用muduo网络库、CMake编译、MySQL数据库、JSon序列化与反序列化、Redis消息订阅模式以及Nginx负载均衡功能。
有兴趣的宝可以跟我一起实操起来,巩固自己的C++学习吧~
一、项目介绍
本项目是在Linux环境下开发,使用CMake编译构建的基于muduo网络库开发的集群聊天服务器,通过muduo的TcpServer和TCpClient类设计服务端、客户端,使用 muduo 注册消息事件到来的回调函数,并根据得到的MSGID定位到不同的功能处理函数中,主要实现用户注册、用户登录、添加好友、添加群组、群组聊天以及保持离线消息等功能,用户数据存放于MySQL数据库中进行增删改查。
Json实现通信数据的序列化与反序列化,使用第三方库 json.hpp实现
为提高服务器的并发处理能力,可以采用升级服务器性能或增加服务器数量,考虑到机器性能总是有限的,引入Nginx的负责均衡功能将客户端请求分发到不同的服务器上分担压力。
由于采用集群服务器,有多个服务器维护用户,某一业务服务器聊天对象在自己服务器用户表发现离线,可能在别的服务器上在线,本应发送在线消息却发送离线消息,为实现跨服务器通信,服务器直接互联带宽压力大,资源占用庞大,因此引入中间件消息队列Redis,通过Redis的发布订阅消息通信模式,提高服务器的响应能力。
二、项目需求
1. 客户端新用户注册
2. 客户端用户登录
3. 添加好友和添加群组
4. 好友聊天
5. 群组聊天
6. 离线消息
7. nginx配置tcp负载均衡
8. 集群聊天系统支持客户端跨服务器通信
三、技术栈
1、Json序列化和反序列化
2、muduo网络库开发
3、nginx源码编译安装和环境部署
4、nginx的tcp负载均衡器配置
5、redis缓存服务器编程实践
6、基于发布-订阅的服务器中间件redis消息队列编程实践
7、MySQL数据库编程CMake构建编译环境
了解了项目需求与技术栈后,现在让我们一起来搭建所需环境吧~
四、环境搭建
搭建需求:
1.ubuntu linux环境
2. 安装Json开发库
3. 安装boost + muduo网络库、cmake编译开发环境,
4. 安装redis环境
5. 安装mysql数据库
6. 安装nginx
4.1 操作系统
我使用的系统为ubuntu操作系统,版本为20.04,大家可以使用命令查看自己系统的版本信息