C++项目 | 集群聊天服务器 | 客户端异常退出业务
C++项目 | 集群聊天服务器 | 客户端异常退出业务1.clientCloseExecption客户端异常退出处理函数要干两件事: 1.从map中删除用户的连接信息,因为要把底层的socket资源释放掉 2.更新用户状态信息 user表中状态改为offline 1234567891011121314151617181920212223242526//chatservice.cpp//处理客户端异常退出void ChatService::clientCloseExecption(const TcpConnectionPtr &conn){ User user; //1.从map中删除用户的连接信息 { lock_guard<mutex> lock(_connMutex); for(auto it=_userConnMap.begin();it!=_userConnMap.end();++it) { if(it->second==conn) ...
C++项目 | 集群聊天服务器 | 用户登录业务 && 记录用户的连接信息以及线程安全问题
C++项目 | 集群聊天服务器 | 用户登录业务 && 记录用户的连接信息以及线程安全问题1.query函数功能:根据用户号码查询用户信息 封装sql的select查询语句 把查询结果封装到User中返回 没查询到就返回默认结果(id==-1) 12345678910111213141516171819202122232425262728293031323334353637//usermodel.cpp//根据用户号码查询用户信息User UserModel::query(int id){ //根据用户号码查询用户信息 //1.组装sql语句 char sql[1024]={0}; sprintf(sql,"select * from user where id = %d", id); MySQL mysql; //建立连接 if(mysql.connect()) { //获取结果 MYSQL_RES...
C++集群聊天服务器项目总概述
C++集群聊天服务器项目总概述技术栈Json序列化和反序列化 muduo网络库开发 nginx源码编译安装和环境部署 nginx的tcp负载均衡器配置 redis缓存服务器编程实践 基于发布-订阅的服务器中间件redis消息队列编程实践 MySQL数据库编程 CMake构建编译环境 Github托管项目 项目需求 客户端新用户注册 客户端用户登录 添加好友和添加群组 好友聊天 群组聊天 离线消息 nginx配置tcp负载均衡 集群聊天系统支持客户端跨服务器通信 项目目标 掌握服务器的网络I/O模块,业务模块,数据模块分层的设计思想 掌握C++ muduo网络库的编程以及实现原理 掌握Json的编程应用 掌握nginx配置部署tcp负载均衡器的应用以及原理 掌握服务器中间件的应用场景和基于发布-订阅的redis编程实践以及应用原理 掌握CMake构建自动化编译环境 掌握Github管理项目 开发环境 ubuntu linux环境 安装Json开发库 安装boost +...
C++项目 | 集群聊天服务器 | MYSQL数据库代码封装
C++项目 | 集群聊天服务器 | MYSQL数据库代码封装本篇博客介绍如何把MYSQL相关代码整合到项目中来 数据层和业务层也要解耦合,就像网络层和业务层一样 业务层不要出现任何的mysql的增删改查 要在业务层和数据层中间加入一层中间层,完成对sql语句的封装 对于业务层要看到的直接操作对象,而不是sql语句 数据层封装了数据库所有的操作 1.检查有没有相应动态库1sudo find /usr -name "libmysqlclient*" 没有的话说明只是装了mysql server,没装开发包,执行这个命令安装即可 1sudo apt-get install libmysqlclient-dev 2.MYSQL相关代码123456789101112131415161718192021222324252627282930//db.h#ifndef DB_H#define BD_H#include<mysql/mysql.h>#include<string>using namespace std;// 数据库操作类class...
C++项目 | 集群聊天服务器 | Mysql
C++项目 | 集群聊天服务器 | Mysql1.MySQL环境安装设置ubuntu环境安装mysql-server和mysql开发包,包括mysql头文件和动态库文件,命令如下: 12sudo apt-get install mysql-server =》 安装最新版MySQL服务器sudo apt-get install libmysqlclient-dev =》 安装开发包 ubuntu默认安装最新的mysql,但是初始的用户名和密码是自动生成的,按下面步骤修改mysql的root用 户密码为123456 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162【step 1 】tony@tony-virtual-machine:~$ sudo cat /etc/mysql/debian.cnf[client]host = localhostuser = debian-sys-maint...
C++项目 | 集群聊天服务器 | 业务模块
C++项目 | 集群聊天服务器 | 业务模块要达到的目的:完全解耦网络模块的代码和业务模块的代码 通过js[“msgid”]绑定一个回调函数,对应获得一个业务处理器handler(handler就是回调函数) 只要解析出来msgid就可以回调对应的函数,而不用写什么if(msgid==1)就怎么样怎么样这样的代码 1.头文件使用单例模式实现聊天服务器业务类 用函数对象表示回调函数 123456789101112131415#ifndef PUBLIC_H#define PUBLIC_H/*server和client的公共文件*/enum EnMsgType{ LOGIN_MSG=1, //登录消息 REG_MSG //注册消息};#endif 12345678910111213141516171819202122232425262728293031323334353637//chatservice.hpp#ifndef CHATSERVICE_H#define...
C++项目 | 集群聊天服务器 | 网络模块
C++项目 | 集群聊天服务器 | 网络模块写一个模块测试一个模块 头文件1234567891011121314151617181920212223242526272829303132333435//chatserver.hpp#ifndef CHATSERVER_H#define CHATSERVER_H#include<muduo/net/TcpServer.h>#include<muduo/net/EventLoop.h>#include<functional>using namespace muduo;using namespace muduo::net;//聊天服务器的主类class ChatServer{public: //初始化聊天服务器对象 ChatServer(EventLoop* loop, const InetAddress& listenAddr, const string& nameArg); //启动服务 void...
C++项目 | 集群聊天服务器 | moduo网络库
C++项目 | 集群聊天服务器 | moduo网络库1.muduo网络库编程1.muduo源码编译安装muduo库源码编译安装和环境搭建,参考笔者的另外一篇博客: 在 Ubuntu 上安装 Muduo 网络库的详细指南_如何安装muduo库呢-CSDN博客 2.基于muduo的客户端服务器编程muduo网络库的编程很容易,要实现基于muduo网络库的服务器和客户端程序,只需要简单的组合 TcpServer和TcpClient就可以,代码实现如下: 123456789101112131415161718192021222324252627282930313233343536373839/*服务器类,基于muduo库开发*/class ChatServer{public: // 初始化TcpServer ChatServer(muduo::net::EventLoop *loop, const muduo::net::InetAddress &listenAddr) : _server(loop,...
C++项目 | 集群聊天服务器 | CMake
C++项目 | 集群聊天服务器 | CMakeCMake简介使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。 CMake安装ubuntu上直接执行 sudo apt install cmake 安装完成,可以通过cmake -version查看其版本: 1234darling@darling:~/桌面/chat_sever$ cmake --versioncmake version 3.28.3CMake suite maintained and supported by Kitware (kitware.com/cmake). CMake使用介绍1.与项目相关的部分就是使用一下CMake,编译一下我们的测试文件muduo_server.cpp 0.类比g++1g++ -o server -g muduo_server.cpp xxx.cpp -I/usr/include -L/usr/lib -lmuduo_net -lmuduo_base...
C++项目 | 集群聊天服务器 | Json
C++项目 | 集群聊天服务器 | JsonJson介绍Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 我们知道TCP是字节流,所以我们需要把发送的消息数据给序列化,用的工具就是Json。 发送到对端再反序列化还原数据。 一个优秀的Json三方库JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。 具有以下特点 1.直观的语法 2.整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便 3.使用 C++ 11 标准编写 4.使用 json 像使用 STL 容器一样 5.STL 和 json 容器之间可以相互转换 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind...