基于muduo网络库实现的集群聊天服务器

这篇具有很好参考价值的文章主要介绍了基于muduo网络库实现的集群聊天服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

!!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!!
!!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!!
!!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!!

项目内容

使用muduo网络库搭建网络核心模块、Nginx实现聊天服务器的集群,提高并发能力、Redis作为消息中间件、MySQL作为数据存储、json序列化和反序列化作为通信协议的实时聊天服务器。

开发环境

Centos 7 + VsCode远程Linux开发、Cmake构建、Linux Shell输出项目编译脚本

安装说明

1、Linux下安装Nginx并配置Tcp负载均衡
2、Linux下安装MySQL
3、Linux下安装Redis
4、安装CMake

技术介绍

1、使用muduo网络库作为项目的网络核心模块,提供高并发网络IO服务,解耦网络和业务模块代码;

2、使用json序列化和反序列化消息作为私有通信协议;

3、配置nginx基于tcp的负载均衡,实现聊天服务器的集群功能,提高后端服务的并发能力;

4、基于redis的发布-订阅功能,实现跨服务器的消息通信;

5、使用mysql关系型数据库作为项目数据的落地存储;

6、使用连接池提高数据库的数据存取功能。

项目目录

muduo服务器,个人项目开发,c++,linux,nginx

  • autobuild.sh:一键编译脚本
  • chat.sql:创建数据库表的sql脚本
  • bin:存放服务器和客户端的可执行程序
  • build:cmake编译生成的临时文件
  • CMakeLists.txt:项目使用cmake作为编译环境
  • include:项目的头文件
  • src:项目的源文件
  • test:muduo网络库使用的demo和json序列化和反序列化的demo
  • thirdparty:存放json.hpp

数据库设计

muduo服务器,个人项目开发,c++,linux,nginx

muduo服务器,个人项目开发,c++,linux,nginx

muduo服务器,个人项目开发,c++,linux,nginx

项目介绍

功能分为:登录账号、注册账号、退出账号、一对一聊天业务、创建群聊业务、加入群聊业务、群内发消息业务、添加好友业务、离线消息存储业务。

特别说明:以下示例已经启动Nginx和redis-server,Nginx集群了两台服务器,端口分别为6000、6002。

启动服务器

这里启动两台服务器,因为Nginx配置tcp负载均衡时配置了两台。

muduo服务器,个人项目开发,c++,linux,nginxmuduo服务器,个人项目开发,c++,linux,nginx

启动客户端

同样启动两台客户端进行聊天业务。

muduo服务器,个人项目开发,c++,linux,nginx

注册账号

muduo服务器,个人项目开发,c++,linux,nginx

wang wu用户注册成功,他的用户id为3,登录时通过用户id去登录。

登录成功

muduo服务器,个人项目开发,c++,linux,nginx

muduo服务器,个人项目开发,c++,linux,nginx

两台客户端分别登录了两个用户,用户id分别为1和3,可以看到用户id为1的用户已经添加了好友和群聊,但是id为3的用户还没有添加任何好友和群聊。

一对一聊天业务

现在进行id=3和id=1之间聊天,不是好友也可以互相聊天。

一对一聊天的命令行输入为:chat:用户id:内容
muduo服务器,个人项目开发,c++,linux,nginx

创建群聊业务

创建群聊的命令行:creategroup:群聊名:群聊描述

创建群聊的人权限为创建者。

muduo服务器,个人项目开发,c++,linux,nginx

muduo服务器,个人项目开发,c++,linux,nginx

muduo服务器,个人项目开发,c++,linux,nginx
可以看到,数据库里群聊已经创建成功,群聊id为2,userid=3的用户在groupid=2的群里的权限为创建者。

加入群聊业务

muduo服务器,个人项目开发,c++,linux,nginx
muduo服务器,个人项目开发,c++,linux,nginx

userid=1的用户加入groupid=2的群,他的权限为普通权限。

群聊业务

muduo服务器,个人项目开发,c++,linux,nginxuserid=3的用户在groupid=2的群里发了一条消息,群内成员收到了这条消息。

添加好友业务

muduo服务器,个人项目开发,c++,linux,nginx
muduo服务器,个人项目开发,c++,linux,nginx

可以看到,userid=3的用户有一个好友,好友id=1,即userid=1的用户。

离线消息存储业务

现在我们让userid=3的用户退出,userid=1的用户持续为他发消息。

muduo服务器,个人项目开发,c++,linux,nginx
muduo服务器,个人项目开发,c++,linux,nginx
数据库里已经存了两条消息,但是中文乱码了,不影响结果。

现在我们让userid=3的用户重新登录。

muduo服务器,个人项目开发,c++,linux,nginx
刚刚添加的好友、群聊、离线消息在重新登录之后都成功显示出来了。

特殊说明

要使程序成功跑起来,需要在db.cpp的数据库ip和密码改成自己本机的ip和密码。

muduo服务器,个人项目开发,c++,linux,nginx

Gitee地址

https://gitee.com/hnSVN/ChatServerProject文章来源地址https://www.toymoban.com/news/detail-858797.html

到了这里,关于基于muduo网络库实现的集群聊天服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【项目设计】仿 muduo 库实现 OneThreadOneEventLoop 式并发服务器

    本项目主要是模仿 muduo 库实现一个以主从 Reactor 为模型,以 OneThreadOneEventLoop 为事件驱动的高并发服务器组件。通过这个服务器组件,我们可以简洁快速的搭建出一个高性能的 TCP 服务器。并且组件内部会提供不同的应用层协议支持,组件使用者可以通过这些协议快速的完成

    2024年04月23日
    浏览(68)
  • 一、C++项目:仿muduo库实现高性能高并发服务器

    仿mudou库one thread oneloop式并发服务器实现 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器: 通过实现的高并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建。并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建

    2024年02月07日
    浏览(51)
  • 仿muduo库实现one thread one loop式并发服务器

      文章目录 一、项目简介 二、项目整体认识 2、1 HTTP服务器 2、2 Reactor模型 三、预备知识 3、1 C++11 中的 bind 3、2 简单的秒级定时任务实现 3、3 正则库的简单使用 3、4 通用类型any类型的实现 四、服务器功能模块划分与实现 4、1 Buffer模块 4、2 Socket模块 4、3 Channel模块 4、

    2024年04月09日
    浏览(56)
  • 1.9.C++项目:仿muduo库实现并发服务器之Connection模块的设计

    项目完整在: Connection模块,一个连接有任何的事件怎么处理都是有这个模块来进行处理的,因为组件的设计也不知道使用者要如何处理事件,因此只能是提供一些事件回调函数由使用者设置。 发送数据 —— 给用户提供的发生数据的接口,并不是真的发送接口,而只是把数

    2024年02月07日
    浏览(48)
  • 1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

    1.线程数量可配置(0或多个) 2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象! 3. 提供线程分配的功能! 针对LoopThread设计一个线程池,便于管理。 对所有的LoopThread进行分配和管理! 1.线程数量可配置(0或多个) 注意事项:在服务器中,主从Reactor模型是

    2024年02月07日
    浏览(50)
  • 1.6.C++项目:仿muduo库实现并发服务器之channel模块的设计

    项目完整版在: 1.对监控事件的管理 描述符是否可读 描述符是否可写 对描述符监控可读 对描述符监控可写 解除可读事件监控 解除可写事件监控 解除所有事件监控 2.对监控事件触发后的处理 设置对于不同事件的回调处理函数 明确触发了某个事件该如何处理 对socket套接字的

    2024年02月08日
    浏览(48)
  • 1.5.C++项目:仿muduo库实现并发服务器之socket模块的设计

    项目完整版在: Socket模块是对套接字操作封装的一个模块,主要实现的socket的各项操作。 对socket套接字的操作进行封装。 对socket套接字的操作进行封装。 创建套接字 绑定地址信息 开始监听 向服务器发起连接 获取新连接 接受数据 发送数据 关闭套接字 创建一个监听链接

    2024年02月07日
    浏览(47)
  • 1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计

    项目完整版在: Buffer模块是一个缓冲区模块,用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 存储数据,取出数据 1.实现换出去得有一块内存空间,采用vector ,vector底层是一个线性的内存空间! 1.默认空间大小 2.当前的读取数据位置! 3.当前的写入数据位置! 写入

    2024年02月07日
    浏览(47)
  • C++集群聊天服务器 nginx+redis安装 笔记 (中)

    一、nginx安装 nginx: download 下载nginx安装包 二、redis安装 Install Redis on Linux | Redis 集群聊天服务器推荐和参考文章,下文部分文字来自这篇文章: 集群聊天服务器:三、集群代码实现_网络编程多服务端集群怎么实现-CSDN博客 https://blog.csdn.net/qq_42441693/article/details/129167974?spm=100

    2024年02月19日
    浏览(51)
  • C++项目——集群聊天服务器项目(九)客户端异常退出业务

    服务器端应检测到客户端是否异常退出,因此本节来实现客户端异常退出,项目流程见后文 (1)在业务模块定义处理客户端异常退出的函数 (2)集群聊天服务器项目(八)提到,哈希表_userConnMap存储用户的id和通信连接,若客户端异常退出,表示该客户端登录用户已经下线,

    2024年04月17日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包