C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置

这篇具有很好参考价值的文章主要介绍了C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天开始想更新一个C++项目,实现一个支持跨服务器通信、支持负载均衡的集群聊天服务器项目。项目会应用muduo网络库、CMake编译、MySQL数据库、JSon序列化与反序列化、Redis消息订阅模式以及Nginx负载均衡功能。

有兴趣的宝可以跟我一起实操起来,巩固自己的C++学习吧~

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,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,大家可以使用命令查看自己系统的版本信息

查看命令:

(1)命令:

lsb_release -a

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

(2)命令:

cat /proc/version

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

(3)命令:

uname -a

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

当然,centos及其他系统也可以,大家根据自己实际情况使用对应命令搭建即可!

4.2 muduo网络库的安装

由于muduo网络库是基于Boost网络库,所以先安装Boost库

4.2.1 Boost库安装

(1)下载Boost库

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

(2)解压

tar xzvf boost_1_69_0.tar.gz

(3)解压完毕后,进入目录中

cd /boost_1_69_0/

(4)获取所需的库,主要的是boost::regex支持的icu

sudo apt-get update
sudo apt-get install build-essential g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev

(5)Boost引导程序设置

./bootstrap.sh --prefix=/usr/

执行

./b2

安装

sudo ./b2 install

(6)测试是否安装成功

#include <iostream>
#include <boost/bind.hpp>
#include <string>
using namespace std;

class Hello{
	public:
		void say(string name)
		{
			cout << name << "Nice to meet you!" << endl;
		}
};

int main()
{
	Hello h;
	auto func=boost::bind(&Hello::say,&h,"Hey boy ");
	func();
	return 0;
}

如果打印结果:

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

代表安装成功!

4.2.2 muduo库安装

muduo库是一个基于reactor反应堆模型的多线程C++网络库,基于Boost开发的。

(1)解压muduo压缩文件

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

unzip muduo-master.zip

(2)进入解压目录

cd muduo-master

(3)vi编辑CMakeLists.txt文件,注释第十三option行,保存退出

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

(4)运行build.sh源码编译构建程序,muduo是用cmake来构建的,需要安装cmake

命令:

sudo apt-get install cmake

编译:

./build.sh

编译完成,安装muduo库

./build.sh install

(5)拷贝头文件和库文件路径

把inlcude(头文件)和lib(库文件)目录下的文件拷贝到系统目录下

cd build/release-install-cpp11/include/
mv muduo/ /usr/include/
cd../lib/
mv * /usr/local/lib/

(6)编写测试代码,测试muduo是否能正常使用

#include <muduo/net/TcpServer.h>
#include <muduo/base/Logging.h>
#include <boost/bind.hpp>
#include <muduo/net/EventLoop.h>
// 使用muduo开发回显服务器
class EchoServer {
public:
	EchoServer(muduo::net::EventLoop* loop,
		const muduo::net::InetAddress& listenAddr);
  	void start();
private:
	void onConnection(const muduo::net::TcpConnectionPtr& conn);
	void onMessage(const muduo::net::TcpConnectionPtr& conn,
                 muduo::net::Buffer* buf,
		 muduo::Timestamp time);
	muduo::net::TcpServer server_;
};
EchoServer::EchoServer(muduo::net::EventLoop* loop,
 			const muduo::net::InetAddress& listenAddr)
  	: server_(loop, listenAddr, "EchoServer")
{
	server_.setConnectionCallback(boost::bind(&EchoServer::onConnection, this, _1));
  	server_.setMessageCallback(boost::bind(&EchoServer::onMessage, this, _1, _2, _3));
}
void EchoServer::start()
{
	server_.start();
}
void EchoServer::onConnection(const muduo::net::TcpConnectionPtr& conn) 
{ LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
           << conn->localAddress().toIpPort() << " is " << (conn->connected() ? "UP" : "DOWN");
}
void EchoServer::onMessage(const muduo::net::TcpConnectionPtr& conn,
				 muduo::net::Buffer*buf,
				 muduo::Timestamp time)
{
  	// 接收到所有的消息,然后回显
  	muduo::string msg(buf->retrieveAllAsString());
	LOG_INFO << conn->name() << " echo " << msg.size() << " bytes, "
           	 << "data received at " << time.toString(); conn->send(msg);
}
int main()
{
	LOG_INFO << "pid = " << getpid();
	muduo::net::EventLoop loop;
  	muduo::net::InetAddress listenAddr(8888);
	EchoServer server(&loop, listenAddr);
 	server.start();
	loop.loop();
}

终端执行命令:

g++ Muduo_text.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11

执行./a.out文件,程序开始运行,再开启一个终端,输入

echo "Hello world"|nc localhost 8888

终端回显Hello world,且服务器端打印日志信息,证明muduo库安装成功!

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

4.3 Json第三方库

使用json.hpp第三方库

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。

#include "json.hpp"
using json = nlohmann::json;

4.4 安装Redis环境

安装Redis可参考这篇博主的文章:Ubuntu中安装mysql和redis并配置远程连接_ubuntu redis远程访问-CSDN博客

4.5 安装Mysql环境

sudo apt-get install mysql-server    =》 安装最新版MySQL服务器
sudo apt-get install libmysqlclient-dev =》 安装开发包

最后只要能使用

mysql -u root -p

登录,密码是123456即可

使用命令:

netstat	-tanp

查看是否安装成功

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

如果看到有mysqld与redis-server服务开启即可

4.7 nginx环境可后续再安装

4.8 配置远程开发环境

我选用的开发方式是:windows+vscode配置远程Linux开发环境

注意注意注意!这里vscode要用管理员方式打开

(1)linux系统运行sshd服务

见上图开启mysqld与redis-server服务,可以看到开启sshd服务

(2)在vscode上安装Remote Development插件,其依赖插件会自动安装

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

当然,还要下载C/C++、Code Runner和CMake等插件,见下图,大家自行安装

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

(3)配置远程linux主机的信息

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

左边的小图标,有个远程电脑样式c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

点击SSH右边的小齿轮,打开SHH配置文件

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

选择第一个config文件

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

IP地址可用

ifconfig

命令查看

(4)在vscode上开发远程连接linux

点击在当前窗口连接,输入密码即可登陆成功

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

至此,环境配置成功!

需特别注意:vscode管理员身份运行、.ssh权限问题以及ssh扩展设置问题

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

大家可以先按照上述步骤搭建环境,搭建成功后进行接下来的项目研究!

c++集群聊天服务器,C++实现集群聊天服务器项目,服务器,运维,c++,学习,开发语言

如果有问题,还请及时联系我,感谢~

参考文章:

在Ubuntu上安装Boost的五种方法(全网最全,建议收藏)_ubuntu安装boost-CSDN博客

C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客

Ubuntu中安装mysql和redis并配置远程连接_ubuntu redis远程访问-CSDN博客文章来源地址https://www.toymoban.com/news/detail-851095.html

到了这里,关于C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! 使用muduo网络库搭建网络核心模块

    2024年04月26日
    浏览(28)
  • 【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

    hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析,在这篇文章中, 你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了

    2024年04月28日
    浏览(33)
  • Linux服务器集群-大数据基础环境搭建指南

    本文将构建三台Linux服务器(node1、node2、node3),通过相关配置,搭建出一个Linux服务器集群环境适用于大数据的开发学习。 本文使用的VMware版本为:VMware16; 本文环境搭建使用到的Linux发行版本为:CentOS7; 本文的电脑操作环境为:windows11。 首先,需要根据之前发文中的流程

    2024年02月07日
    浏览(50)
  • (十)服务器K8S集群部署SpringBoot项目实战

    可以在 https://start.spring.io/网站准备一个项目,这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可。 1.更新系统软件包: 2.安装 OpenJDK 11: 3.验证 Java 安装: 4.配置环境变量 5.使环境变量生效 1.可以在 https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin

    2024年02月12日
    浏览(41)
  • 云服务器部署项目环境

    以下是腾讯云和阿里云都有免费试用的活动,新用户均可申请试用,。 https://cloud.tencent.com/act/free/enterprise?from=17591 阿里云免费试用 https://free.aliyun.com/?spm=5176.19720258.J_2937333540.5.7b8176f4czVD57 以下以腾讯云为例,每到双11,618等大型购物节均有力度很大的优惠,本人买了一个 CPU

    2024年02月05日
    浏览(35)
  • 华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 RabbitMQ 集群

    华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 RabbitMQ 集群 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么 华为云云耀云服务器和上一代的服务器对

    2024年02月07日
    浏览(65)
  • 部署 ssm 项目到云服务器上(购买云服务器 + 操作远程云服务器 + 服务器中的环境搭建 + 部署项目到服务器)

    推荐的做法:买一个云服务器。(主要是要有一个外网 IP) 好处:① 方便 (如果自己搭建,就比较麻烦)、② 便宜 (如果只是为了学习使用,最低配置的服务器完全够用,不到 50 元就能买一年使用权)、③ 有外网 IP ,可以部署项目(有了外网 IP,我们部署的项目,别人

    2024年02月11日
    浏览(58)
  • 基于ssm+shiro+redis+nginx tomcat服务器集群管理项目

    毕业设计——基于ssm+shiro+redis+nginx tomcat服务器集群管理项目 完整项目地址:https://download.csdn.net/download/lijunhcn/88430549 1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时可以借助此demo快速构建项目 2.实现shiro的授

    2024年02月03日
    浏览(53)
  • 毕业设计——基于ssm+shiro+redis+nginx tomcat服务器集群管理项目

    毕业设计——基于ssm+shiro+redis+nginx tomcat服务器集群管理项目 完整项目地址:https://download.csdn.net/download/lijunhcn/88430549 1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时可以借助此demo快速构建项目 2.实现shiro的授

    2024年02月04日
    浏览(45)
  • Linux环境下部署项目到服务器完整过程

    1,首先,选择一款云上服务器(这里用的是腾讯云),右侧搜索栏输入云服务器或轻量服务器(这里用的轻量服务器),立即选购 2,选择自己要的服务器配置,系统镜像选择Centos即可 3,实例创建成功后,点击控制台搜索请量服务器找到新创建的实例重置密码 4,点击防火墙

    2024年02月02日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包