C++集群聊天服务器项目博客目录
C++集群聊天服务器项目博客目录C++集群聊天服务器项目总概述-CSDN博客 github源码地址: DarlingGYQ/chatserver: 基于C++11的可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 环境配置windows下使用vscode远程连接Linux服务器进行开发-CSDN博客 ubuntu安装MySQL-CSDN博客 ubuntu安装Redis-CSDN博客 Ubuntu环境下安装部署Nginx-CSDN博客 在 Ubuntu 上安装 Muduo 网络库的详细指南_如何安装muduo库呢-CSDN博客 服务器端C++项目 | 集群聊天服务器 | Json-CSDN博客 C++项目 | 集群聊天服务器 | moduo网络库-CSDN博客 C++项目 | 集群聊天服务器 | CMake-CSDN博客 C++项目 | 集群聊天服务器 | Mysql-CSDN博客 C++项目 | 集群聊天服务器 | 工程目录创建-CSDN博客 C++项目 | 集群聊天服务器 | 网络模块-CSDN博客 C++项目 | 集群聊天服务器 |...
C++项目 | 集群聊天服务器 | 服务器集群
C++项目 | 集群聊天服务器 | 服务器集群1.负载均衡存在的意义为什么要有负载均衡器? 一台机器的文件描述符是有限的,之前的linux系统最大也就1024,那说明也就同时最多可以提供1024个人的服务聊天服务还是长连接,需要一直保持和服务器的连接才行,那么随着用户规模的扩大,就需要更多的服务器,而负载均衡器就是负责把这些请求分发到不同的服务器上面去。不可能说是给用户三台服务器,让用户自己选要用哪一台提供服务 第一点是基本功能 第二点,保持心跳是以防有的主机发生了故障,不能够继续工作,那么负载均衡器不可以往这个服务器发送请求服务的请求 第三点,一般服务器都是24小时不关的,因为可能24小时都有人请求服务,不可能说是为了添加新的机器就把服务给停掉,这样的话用户体验会很差,所以要有第三点 2.服务器集群负载均衡器 -...
C++项目 | 集群聊天服务器 | 项目管理以及github托管
C++项目 | 集群聊天服务器 | 项目管理以及github托管项目的github地址:DarlingGYQ/chatserver: 基于C++11的可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 1.github中ssh key申请1、首先需要检查你电脑是否已经有 SSH key运行 git Bash 客户端,输入如下代码: 12$ cd ~/.ssh$ ls 这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤2,直接进入步骤3。 2、创建一个 SSH key1$ ssh-keygen -t rsa -C "your_email@example.com" 代码参数含义: -t 指定密钥类型,默认是 rsa ,可以省略。-C 设置注释文字,比如邮箱。-f 指定密钥文件存储文件名。 以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如: 12Generating...
C++项目 | 集群聊天服务器 | 客户端好友功能和群组功能开发以及退出功能实现
C++项目 | 集群聊天服务器 | 客户端好友功能、群组功能开发以及退出功能实现1.服务器支持的命令123456789101112131415161718192021222324252627282930313233343536// "help" command handlervoid help(int fd = 0, string str = "");// "chat" command handlervoid chat(int, string);// "addfriend" command handlervoid addfriend(int, string);// "creategroup" command handlervoid creategroup(int, string);// "addgroup" command handlervoid addgroup(int, string);// "groupchat" command...
C++项目 | 集群聊天服务器 | 客户端首页功能开发
C++项目 | 集群聊天服务器 |...
C++项目 | 集群聊天服务器 | 群组功能业务
C++项目 | 集群聊天服务器 | 群组功能业务实现三个功能: 1.创建群 2.加入群 3.群里聊天 1.相关的数据库表 2.消息类型12345678910111213enum EnMsgType{ LOGIN_MSG=1, //登录消息 LOGIN_MSG_ACK, //登录响应消息 REG_MSG, //注册消息 REG_MSG_ACK, //注册响应消息 ONE_CHAT_MSG, //聊天消息 ADD_FRIEND_MSG,//添加好友消息 CREATE_GROUP_MSG,//创建群组 ADD_GROUP_MSG,//加入群组 GROUP_CHAT_MSG,//群聊天}; 3.groupuser.hpp用来存储群组成员信息的 对比user多了一个role,表明是管理员还是普通成员 12345678910111213141516#ifndef GROUPUSER_H#define...
C++项目 | 集群聊天服务器 | 添加好友业务
C++项目 | 集群聊天服务器 | 添加好友业务添加好友后,每次用户登录会返回离线消息和好友列表 这里的添加好友功能就是单方面的,我只要通过你的id加上你,就是加上了,不用同意或者拒绝 1.数据库层的封装friend表: friendmodel.hpp 12345678910111213141516171819#ifndef FRIENDMODEL_H#define FRIENDMODEL_H#include<vector>#include"user.hpp"using namespace std;//维护好友信息的操作接口方法class FriendModel{public: //添加好友关系 void insert(int userid,int frinedid); //返回用户好友列表 每次下线更新,每次上线返回给用户 vector<User> query(int userid);}; ...
C++项目 | 集群聊天服务器 | 服务器异常退出
C++项目 | 集群聊天服务器 | 服务器异常退出本次主要处理服务器程序因为ctrl+c退出的异常,会将所有online的改为offline 1.main.cpp捕获ctrl+c信号,进行处理 12345678910111213141516171819202122232425#include"chatserver.hpp"#include"chatservice.hpp"#include<iostream>#include<signal.h>using namespace std;//处理器ctrl + c结束后,重置user 的状态信息,把登录变成未登录void resetHandler(int){ ChatService::instance()->reset(); exit(0);}int main(){ signal(SIGINT,resetHandler); EventLoop loop; InetAddress...
C++项目 | 集群聊天服务器 | 点对点聊天业务以及离线消息存储业务
C++项目 | 集群聊天服务器 | 点对点聊天业务 && 离线消息存储业务1.点对点聊天业务业务逻辑:用户给用户发消息,如果目的用户在线,那就找到对应的连接,然后发送消息即可 如果目的用户不在线,那就存到离线消息表,等到下次上线的时候服务器再发过去 123456789101112131415161718//一对一聊天业务void ChatService::oneChat(const TcpConnectionPtr& conn,json &js,Timestamp time){ //目的用户 int to=js["to"].get<int>(); { lock_guard<mutex> lock_(_connMutex); auto it=_userConnMap.find(to); if(it!=_userConnMap.end()) { //to在线,转发消息 ...
C++项目 | 集群聊天服务器 | Model数据层代码框架设计以及用户注册代码
C++项目 | 集群聊天服务器 | Model数据层代码框架设计以及用户注册代码数据库代码要和业务层分离开 我们希望在业务层看到的都是对象 在数据层操作具体的sql语句 1.User根据user表封装User对象 就是一些set和get方法,一个User对象对应user表中的一条记录 12345678910111213141516171819202122232425262728293031323334//user.hpp#ifndef USER_H#define USER_H#include<string>using namespace std;class User{public: User(int id=-1,string name="",string pwd="",string state="offline") { this->id=id; this->name=name; this->password=pwd;...