C++实现集群聊天服务器(一)

笔记参考腾讯课堂施磊老师课程:C++实现集群聊天服务器

文章目录

    • 技术栈
    • 项目需求
    • 项目目标
    • 开发环境
    • 配置远程开发环境
    • 下载
    • Json介绍
    • 一个优秀的Json三方库
    • 包含Json头文件
    • Json数据序列化
      • 1. 普通数据序列化
      • 2. 容器序列化

技术栈

  • Json序列化和反序列化
  • muduo网络库开发
  • nginx源码编译安装和环境部署
  • nginx的tcp负载均衡器配置
  • redis缓存服务器编程实践
  • 基于发布-订阅的服务器中间件redis消息队列编程实践
  • MySQL数据库编程
  • CMake构建编译环境
  • Github托管项目

项目需求

  1. 客户端新用户注册
  2. 客户端用户登录
  3. 添加好友和添加群组
  4. 好友聊天
  5. 群组聊天
  6. 离线消息
  7. nginx配置tcp负载均衡
  8. 集群聊天系统支持客户端跨服务器通信

项目目标

  1. 掌握服务器的网络I/O模块,业务模块,数据模块分层的设计思想
  2. 掌握C++ muduo网络库的编程以及实现原理
  3. 掌握Json的编程应用
  4. 掌握nginx配置部署tcp负载均衡器的应用以及原理
  5. 掌握服务器中间件的应用场景和基于发布-订阅的redis编程实践以及应用原理
  6. 掌握CMake构建自动化编译环境
  7. 掌握Github管理项目

开发环境

  1. ubuntu linux环境
  2. 安装Json开发库
  3. 安装boost + muduo网络库开发环境,参考博客:
    https://blog.csdn.net/QIANGWEIYUAN/article/details/89023980
  4. 安装redis环境
  5. 安装mysql数据库环境
  6. 安装nginx
  7. 安装CMake环境

配置远程开发环境

windows+vscode配置远程linux开发环境

参考博客:https://blog.csdn.net/qq756684177/article/details/94236990

  1. linux系统运行sshd服务
  2. 在vscode上安装Remote Development插件,其依赖插件会自动安装
  3. 配置远程linux主机的信息
  4. 在vscode上开发远程连接linux

VS环境创建远程linux跨平台项目

参考博客:https://blog.csdn.net/QIANGWEIYUAN/article/details/89469717

vscode在linux环境下直接开发

网络搜索关键词


下载

链接: https://pan.baidu.com/s/1kXyXy5ct1OmIxu8uSfjS1g 提取码: 13gi


Json介绍

Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


一个优秀的Json三方库

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

具有以下特点:

  • 直观的语法
  • 整个代码由一个头文件组成json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便
  • 使用 C++ 11 标准编写
  • 使用 json 像使用 STL 容器一样
  • STL 和 json 容器之间可以相互转换
  • 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践

包含Json头文件

在网络中,常用的数据传输序列化格式有 XML、Json、ProtoBuf,在公司级别的项目中,大量的在使用 ProtoBuf 作为数据系列化的方式,以其数据压缩编码传输,占用带宽小,同样的数据信息,是 Json 的 1/10,XML 的 1/20,但是使用起来比 Json 稍复杂一些,所以项目中我们选择常用的 Json 格式来打包传输数据。

下面列举一些项目中用到的有关 Json 数据的序列化和反序列化代码,仅供参考!JSON for ModernC++这个三方库的使用非常简单,如下所示:

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

Json数据序列化

就是把我们想要打包的数据或者对象,直接处理成 Json 字符串。

1. 普通数据序列化

json js;
// 添加数组
js["id"] = {1,2,3,4,5}; 
// 添加key-value 
js["name"] = "zhang san"; 
// 添加对象 
js["msg"]["zhang san"] = "hello world"; 
js["msg"]["liu shuo"] = "hello china"; 
// 上面等同于下面这句一次性添加数组对象 
js["msg"] = {{"zhang san", "hello world"}, {"liu shuo", "hello china"}}; 
cout << js << endl; //string sendBuf = js.dump(); 将json数据对象序列化成json字符串sendBuf
                    //cout << sendBuf.c_str() << endl;

上面js对象的序列化结果是:
{"id":[1,2,3,4,5],"msg":{"liu shuo":"hello china","zhang san":"hello world"},"name":"zhang san"}

2. 容器序列化

你可能感兴趣的:(C++实现集群聊天服务器,c++,服务器,开发语言)