C++聊天室项目
文章平均质量分 65
手把手教写一个C++聊天室项目
看,未来
墨家学徒
展开
-
chat集群聊天室项目 代码+讲解(二):业务模块
文章目录项目简单架构图代码讲解为什么要设置单例MsgHandler 的设计业务中为什么不直接对接数据库?项目简单架构图类图不急。。。代码闲话不多说,直接上代码。我精简化了一下,业务代码基本千篇一律的,没什么好看的。redis那一块也先拿掉了,后面升级再说。#pragma#include<muduo/net/TcpConnection.h>#include<unordered_map>#include<functional>#include<.原创 2021-09-12 16:56:14 · 823 阅读 · 1 评论 -
chat集群聊天室项目 代码+讲解(一):网络模块
文章目录前言简单架构图代码讲解setConnectionCallbacksetMessageCallback前言准备翻新一下我那个C++集群聊天室项目的讲解博客,那个系列刚开始讲的还比较有点耐心,后面就直接堆代码了,大家互相理解理解,那确实有点触碰到我目前的极限了,能写下来就不错了。勉强把项目整好之后我就去看muduo了(好像还有最后一篇《TCPServer》还没放出来哈,真的是因为VScode坏了,然后又有一件不得不做的事情拖住了几天时间。)目前已经粗略的捋了一遍muduo的源码,这周就把项目和..原创 2021-09-12 15:48:49 · 970 阅读 · 0 评论 -
C++搭建集群聊天室(十八):nginx + redis 发布订阅 升级项目为集群服务器
文章目录环境配置与基本知识redis.hppredis.cppchatservice修改从redis消息队列中获取订阅的消息环境配置与基本知识C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置Redis环境搭建与配置hiredis从安装到实操,一条龙服务redis事务处理机制,但当涉猎了解更多 redis 相关知识:我的redis专栏上面该看的看完了,咱往下可就直接上码啦!!!这次的改动会有有点大。redis.hpp愿意放哪儿放哪儿,我觉着吧,怎么说redis也是个数.原创 2021-08-20 21:14:14 · 2756 阅读 · 0 评论 -
C++搭建集群聊天室(十六):代码测试文档
既然客户端都发出来了,总得开始测试一下了,虽然说在整集群,两手抓嘛。测出来一些问题,还有不少问题潜在着。持续更新中文章目录bug 1:bug 2bug 3(待解决)bug 4bug 5bug 1:bug:登录、测试皆失败寻病:debug调试病灶:char sql[128] = {0};sprintf("insert into User(name,password,state) values('%s','%s','%s')", user.getname().c_str().原创 2021-08-20 16:04:42 · 479 阅读 · 1 评论 -
C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置
文章目录nginx简介安装配置ngnixnginx简介单台服务器受限于硬件资源,其性能是有上限的,当单台服务器不能满足应用场景的并发需求量时,就需要考虑部署多个服务器共同处理客户端的并发请求,此时就需要一台负载均衡器,通过预设的负载算法,指导客户端连接服务器。从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入–with-stream参数来激活这个模块。安装配置ngnix下载地址:http://nginx.org/e.原创 2021-08-19 20:49:49 · 840 阅读 · 0 评论 -
C++搭建集群聊天室(十五):客户端
直接塞一个文件里面。client.cpp#include "json.hpp"#include <iostream>#include <thread>#include <string>#include <vector>#include <chrono>#include <ctime>#include <unordered_map>#include <functional>using name原创 2021-08-19 17:39:24 · 561 阅读 · 0 评论 -
C++搭建集群聊天室(十四):群聊功能
文章目录群聊功能思路放码过来groupuser.hppgroup.hppgroupmodel.hppgroupmodel.cpp群聊功能思路1、创建群聊,提交群信息,返回群号2、拉取群人员基本信息,包括昵称、ID。3、群发消息时,如果成员在线则直接推送,成员不在线则存储相应群员的离线消息。放码过来照例先修改一下 public.hpp 文件。#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正.原创 2021-08-19 11:23:23 · 1006 阅读 · 0 评论 -
C++搭建集群聊天室(十三):添加好友功能实现
添加好友又是一个新模块,好友功能。所以,照旧,先在public中写上,然后写上一个model类,再绑定一下,并在service中调用即可。最后重新编译,轻车熟路了。public.hpp#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息 REG_TYPE, //正常注册 REG_MSG_ACK, /.原创 2021-08-18 22:33:53 · 1305 阅读 · 1 评论 -
C++搭建集群聊天室(十二):用户单聊及离线消息处理功能实现
单聊单聊功能其实很简单的,就是数据包的发送,接收。public.h 现状:#ifndef PUBLIC_H_#define PUBLIC_H_enum EnMsgType{ LOGIN_TYPE = 1, //正常登录 LOGIN_MSG_ACK, //登录相应消息 REG_TYPE, //正常注册 REG_MSG_ACK, //注册相应消息 ONE_CHAT_MSG, //一对一聊天消息 GROUP_CHAT_MSG,..原创 2021-08-18 11:48:37 · 1099 阅读 · 0 评论 -
C++搭建集群聊天室(十一):客户端 || 服务器 异常退出解决方案
文章目录客户端异常退出服务端异常退出客户端异常退出此前我们对客户端退出的操作仅仅就是将连接释放掉,但是既然加入了新的业务,受业务影响,客户端的退出就不能是这么简单的处理了。打开 chatserver.cpp ,原先是这样的:void ChatServer::onConnection(const TcpConnectionPtr &conn){ if(!conn->connected()){ //用户断开连接 conn->shutdown(); }.原创 2021-08-17 11:52:09 · 783 阅读 · 0 评论 -
C++搭建集群聊天室(十):登录与注册
前面准备了那么多,这里就直接是水到渠成了。该讲的前面都讲的差不多了,剩下还没讲的都在代码里面。不过由于文档Telnet一直是发送不了数据的状态,就一直没法进一步的测试,等后面写了客户端再说。chatservice.hpp#ifndef CHATSERVICE_H_#define CHATSERVICE_H_#include<muduo/net/TcpConnection.h>#include<unordered_map>#include<functiona.原创 2021-08-17 10:49:36 · 725 阅读 · 0 评论 -
C++搭建集群聊天室(九):数据库代码及用户模型代码封装
数据库模块db.hpp首先,在 include/server 目录下新增文件夹 db,用于存放数据库相关文件。在 db 文件夹下新增文件:db.hpp#ifndef DB_H_#define DB_H_#include<string>#include<mysql/mysql.h>#include<muduo/base/Logging.h>using namespace std;// 数据库配置信息 static string server =.原创 2021-08-17 10:24:15 · 795 阅读 · 5 评论 -
C++搭建集群聊天室(八):网络层代码与业务层代码(登录注册)解耦
文章目录放码过去网络层代码业务层代码主函数CMake运行脚本放码过去多余的废话就不多说了,直接放码上来吧。网络层代码chatserver.hpp,位于include/server目录下、#ifndef CHATSERVER_H_#define CHATSERVER_H_#include<muduo/net/TcpServer.h>#include<muduo/net/EventLoop.h>#include<iostream>using nam.原创 2021-08-15 21:36:33 · 899 阅读 · 2 评论 -
C++搭建集群聊天室(七):MySQL数据库配置 及项目工程目录配置
安装MySQL如果是跟我一样使用CentOS8的话,那就自信点:CentOS 三分钟快速安装MySQLmysql建表数据库叫 chatUser字段名称字段类型字段说明约束idINT用户idPRIMARY KEY、AUTO_INCREMENTnameVARCHAR(50)用户名NOT NULL, UNIQUEpasswordVARCHAR(50)用户密码NOT NULLstateENUM(‘online’, ‘offline’)当.原创 2021-08-14 11:15:31 · 689 阅读 · 0 评论 -
C++搭建集群聊天室(六):muduo网络库
文章目录简介与建议网络服务器编程常用模型muduo 的 reactor 模型muduo 库网络编程示例简介与建议muduo网络库的编程很容易,要实现基于muduo网络库的服务器和客户端程序,只需要简单的组合 TcpServer 和 TcpClient 就可以。所以,我建议,这个系列整完去看一下源码。网络服务器编程常用模型【方案1】 : accept + read/write 不是并发服务器【方案2】 : accept + fork - process-pre-connection 适合.原创 2021-08-13 21:54:59 · 1026 阅读 · 1 评论 -
C++搭建集群聊天室(五):JSON序列化与反序列化
文章目录玩转json什么是jsonPython中的Json模块获取json中的某个数据json.hpp 文件获取序列化实操反序列化代码实操CMake编译最初接触到Json,还是在Python的爬虫里面。玩转json什么是jsonJson是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。如果说现在对json还没有什么概念的朋友,了解了以上内容之后,再了解一下它是字典形式的即可。一切存取操作如字典。只是前后可能.原创 2021-08-13 10:52:20 · 1366 阅读 · 0 评论 -
C++搭建集群聊天室(四):工程统帅神器 Cmake,我爱死它了
“咳咳,讲了这么久,还是不讲点知识点,一直就配置环境配置环境的,烦不烦呐!!!”快了快了,这个环境搭建完就进主题文章目录环境搭建CMAkeLists.txt 文件编写示例专业打包环境搭建1、在插件市场下载 cmake 和 cmake-tools,上一篇有讲过的。2、右击 cmake-tools,选择 extension settings,打开,填写:其中那个值是 cmake 在远程主机上的位置,如果不放心的话可以使用命令 whereis cmake 来确定。3、ok之后,我们在项目文件夹.原创 2021-08-12 22:00:15 · 1005 阅读 · 1 评论 -
C++搭建集群聊天室(三):配置远程代码编辑神器 VScode
资源下载1、下载一个vscode insiders版本,没办法,稳定版还没覆盖到那个功能。下载好了安装起来,是一个绿色的,不是蓝色的,要注意。2、检查ssh是否已安装,命令:netstat -tanp看看有没有一个sshd服务监听在22端口,如果没有,就在远程主机安装 ssh 服务,百度一下教程不少,问题不大。3、安装Remote Development插件安装一个 remote document,那几个 remote 相关的就自动安装好了,然后把其它几个一并安装了吧,机灵点。4、安装好.原创 2021-08-12 20:20:00 · 826 阅读 · 2 评论 -
C++搭建集群聊天室(二):安装muduo网络库
文章目录资源下载安装过程测试muduo是否安装成功资源下载提取码: fid9常规操作啦,前面两三篇都是环境搭建。muduo网络库我就不多做介绍了,一个基于reactor反应堆模型的多线程C++网络库,陈硕大神的作品,不了解的小伙伴可以自行了解一下。也可以去GitHub上自行下载。muduo库是基于boost开发的,所以需要先在Linux平台上安装boost库,安装boost库的方法:搁这儿呢此外,muduo的编译是通过CMAKE来执行的,所以我们还需要安装CMAKE。安装命令就不用我多说了.原创 2021-08-11 19:38:25 · 1212 阅读 · 13 评论 -
C++搭建集群聊天室(一):安装boost库
项目说明没有在Windows下开发的打算,代码也是用vim直接干,所以本系列博客是基于Linux平台的开发。我用的是CentOS8,别的也可以,细微差别而已。全程root权限下去玩。不要被环境耽搁了,配个环境赶紧上车吧。文章目录项目说明前期资源下载安装开始验证是否安装成功前期资源下载首先你可以去官网下,也可以在我这边下,提取码:xxf0如果不知道怎么把文件传输到Linux上的小伙伴建议直接在Linux里面下载,或者可以用Xftp传上去。在开始编译boost之前,建议先将依赖包都装一遍:.原创 2021-08-11 19:12:14 · 2031 阅读 · 9 评论