目录
我们这里虽然没有写出客户端,但是我们完全可以借助我们写好的客户端来测试我们的服务器。
一.环境配置
1.1.Qt在线安装
首先我们可以去下载一下Qt:


这里就根据你自己的电脑型号选择,我选择的是第一个

下载之后,我们将这个文件放到我们需要安装的那个目录里面,例如我就把它放到这个目录里面

接下来我们打开windows命令行
cd D:\Qt
然后我就执行下面这个
qt-online-installer-windows-x64-4.11.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/
注意最前面的这个.exe文件就是我们下载的这个文件名,那么后面这个网址是我们的国内中科大Qt镜像源
如果说我们安装过程中出现了失败,那么我们应该换镜像源重新试试看
国内Qt镜像网站
- 中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
- 清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
- 北京理工大学:http://mirror.bit.edu.cn/qtproject/
- 南京大学:https://mirror.nju.edu.cn/qt
- 腾讯镜像:https://mirrors.cloud.tencent.com/qt/
- 阿里云镜像:https://mirrors.aliyun.com/qt/
- 官网镜像列表:https://download.qt.io/static/mirrorlist/mirmon/
那么我是使用了中科大的镜像源安装成功的
如果我们使用powershell,则需要修改一下我们的命令

.\qt-online-installer-windows-x64-4.11.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/
一运行起来,就会弹出窗口**(注意:整个安装过程是需要联网的!!!)**

这里大家自己去注册账号密码

这里我们选择自定义安装,注意选择好我们的安装目录


我们直接选择是
然后进入下面这个

我们直接选择下面这个

然后我们按照下面那样子选择即可


然后我们点击下一步即可。我们就慢慢等待安装完成。
注意:安装过程千万不能断网。
注意:做这个项目,我们的机器必须安装有VS2019或者更⾼版本
下载完成后,如果没有创建本地方式,点击开始搜索

我们点击

1.2.安装vcpkg
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat

如果遇到下面这种错误

我们就换成下面这个
.\bootstrap-vcpkg.bat

注意:这里需要开一下加速器。
这样子我们就下载到了这个vcpkg.exe了

有了这个vcpkg,我们就能去安装protobuf(注意这里需要开加速器)
.\vcpkg.exe install protobuf protobuf:x64-windows
过程类似下面这个

如果说大家一直卡在这里不动,我们先ctrl+C终止进程。
然后我们可以选择点击那个链接去浏览器里面下载,然后放到我们的downloads目录里面
然后我们重新执行下面这个命令即可
.\vcpkg.exe install protobuf protobuf:x64-windows
完成的情况如下:

然后我们去那个目录vcpkg.exe存在的目录里面,点击下面这个目录

我们点击下面这个目录

这个x64-windows里面就是protobuf的安装目录。

里面存放了protobuf的所有源码和工具


这里就有我们protobuf的库
二.联调
2.1.运行程序
2.1.1.服务端准备
现在我们回到我们的服务器,我们来到这个目录下面

执行下面这个命令
mkdir build && cd build && cmake .. && make

就这样子漫长的等待,大概10分钟左右。

我们发现这个build目录怎么什么东西都没有,其实都存在于这个Service里面。

我们回到build目录里来,然后我们执行下面这个命令
make install
我们去安装一下,注意我们这里已经写好了,会安装到我们的<构建目录>/bin/里面去
例如,如果你在项目根目录下创建了 build 文件夹并进入其中运行 cmake ..,那么:
- 构建目录就是 /path/to/project/build
- 安装后的可执行文件位于 /path/to/project/build/bin/

而其他几个CMakeLists.txt里面则是

所以,就是安装到<构建目录>/bin/里面去了。

现在就安装好了,那么我们在运行这些程序之前呢,我们应该先清理我们服务器这边对应进程的数据。
在MySQL数据库中执行下面这些语句
cpp
use IMS;
TRUNCATE TABLE chat_session_member;
TRUNCATE TABLE friend_apply;
TRUNCATE TABLE friend_relation;
TRUNCATE TABLE message;
TRUNCATE TABLE chat_session;
TRUNCATE TABLE user;
在Redis数据库里面执行下面这个
cpp
flushall
在ES控制台里面执行下面这个(5601端口)
cpp
DELETE /user
DELETE /message
对于RabbitMQ,我们需要去使用浏览器
javascript
主机IP:15672

然后

往下面就能看到

点击这个就能删除这个队列

往下

点击这个就能删除交换机.
现在我们打开7个终端,依次运行起来

2.1.2.客户端准备
注意:至于客户端代码怎么写的,我们这里先不介绍,我们这里就是为了验证我们服务器的功能是否完整,如果说想要知道客户端代码是怎么写的,那么其实很简单,我们后续会教。
首先我们先去我们的代码网址里面把我们的客户端代码克隆下来,然后我们打开QT,点击下面的打开项目

我们选择我们的CMakeLists.txt文件,

点击确认即可,然后点击打开之后可能会出现下面这些,不过不用慌张

直接点确定,点击完之后会说要配置我们的项目,我们直接选择下面这个来,这个是选择构建套件的选择,我们这里选择MinGW构建套件(构建速度很快)

然后我们在后面点击右下角的这个

那么就开始构建我们的客户端项目了。构建好之后就是下面这样子。

然后我们找到我们下面这个NetClient.cpp,里面存放着我们服务端的地址信息

我们进去修改一下

把这里的地址换成我们服务器那边的网关子服务的地址信息
端口号,我们在网关子服务里面设定的如下所示:


更改完毕,我们就运行一下

这个编译时长其实是有一点久的啊!!
2.2.测试
2.2.1.用户+密码注册一个用户,并修改用户信息
我们这里登录注册一共有4种界面,分别对应
- 用户名+密码登录
- 用户名+密码注册
- 邮箱+验证码登录
- 邮箱+验证码注册




那么我们就先分别使用2种方法来进行注册一个新用户
我们先注册一个用户:小明,密码是123456

我们点击注册,注册之后它其实是下面这样子的,直接跳转到登陆界面来了,验证码那一栏会清空

然后我们去看看服务器的用户子服务

这个时候我们可以去看看我们的MySQL数据库里面的情况

当然Redis和ES我们都可以去看看
cpp
GET /user/_search
{
"query": { "match_all": {} },
"size": 100
}

完全没有问题。
我们登陆进去看看

我们点击那个头像

那么我们在这里可以更改我们的昵称,签名,头像
我们现在就一个一个来修改一下

我们点击回车

设置好之后,我们可以去这个服务端的用户子服务这里看看情况,一点问题都没有


我们可以去MySQL数据看一下,完全没有问题

去ES里面

这里其实涉及到了文件上传子服务的上传单个文件,我们可以去看看这个文件存放在服务器的哪里

就是在这个data目录里面

是不是就和我们数据库的那个对上了??
完美
事实上,这里其实是可以设置我们的邮箱的

但是我们不在这里设置,我们换一个用户来设置一下
2.2.2.邮箱注册登陆另外一个用户+好友功能

输入我们的邮箱号,并且点击发送验证码

注册成功之后,自动跳转到登陆界面来了

我们也可以去看看用户子服务

包括MySQL数据库和ES
cpp
mysql> select * from user;
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
| id | user_id | nickname | description | password | email | avatar_id |
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
| 1 | 74a3-2b016880-0000 | 小刚 | 没有什么可以阻挡我 | 123456 | NULL | c744-07089f03-0000 |
| 2 | 047b-39274ca4-0004 | 047b-39274ca4-0004 | NULL | NULL | 9135@qq.com | NULL |
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
2 rows in set (0.00 sec)

完全没有问题!!!!
我们直接登陆进去


我们这里更改一下邮箱

注意,这里是需要给我们更改后的邮箱发邮件的

我们去看

我们去看MySQL数据
cpp
mysql> select * from user;
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
| id | user_id | nickname | description | password | email | avatar_id |
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
| 1 | 74a3-2b016880-0000 | 小刚 | 没有什么可以阻挡我 | 123456 | NULL | c744-07089f03-0000 |
| 2 | 047b-39274ca4-0004 | 047b-39274ca4-0004 | NULL | NULL | 17207007302@139.com | NULL |
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
2 rows in set (0.00 sec)

完全没有问题。
接下来我们试一下添加好友


那么我们可以去这个MySQL数据库看看

然后我们登录到小刚那个账号那边去

然后

可以看到,确实是发来了一条这个好友请求,那么我们点击同意试试看



可以看就是多了一个会话,
我们可以去数据库看看


比较的完美
2.2.2.四种类型的消息发送+语音转文字+删除好友
我们打开这个聊天框

发送一条纯文本消息

发送之后,如果出现了Bug,那么我们可以去消息队列那里看看

如果这个为0,就有2种情况,消费完了,根本没发送给我们的消息队列
我们换一个用户看看

可以看到,收到了这个消息
我们去数据库看看
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
| id | message_id | chat_session_id | user_id | message_type | create_time | content | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
| 1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:19:56 | 你好,小刚!!!! | | | 0 |
| 2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:25:23 | 很高兴认识你 | | | 0 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
2 rows in set (0.00 sec)
我们去ES看看
GET /message/_search
{
"query": { "match_all": {} },
"size": 100
}

都没有什么问题。我们可以去试试看这个聊天记录查询功能(注意只支持纯文本消息的查询)


都是一点问题都没有!!!
那么接下来我们发送一下我们其他类型的消息

我们去数据库看看
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
| id | message_id | chat_session_id | user_id | message_type | create_time | content | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
| 1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:19:56 | 你好,小刚!!!! | | | 0 |
| 2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:25:23 | 很高兴认识你 | | | 0 |
| 3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 1 | 2026-04-04 03:08:18 | | 6c61-47d017d0-0000 | | 2616239327 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
3 rows in set (0.00 sec)
我们也可以去这个file_server的data目录里面看看

看到了吧,果然是多了一个文件。注意另外一个文件是用户小刚更改头像时传递上来的文件。
那么我们接着发送我们的文件消息

我们去数据库看看
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id | chat_session_id | user_id | message_type | create_time | content | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| 1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:19:56 | 你好,小刚!!!! | | | 0 |
| 2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:25:23 | 很高兴认识你 | | | 0 |
| 3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 1 | 2026-04-04 03:08:18 | | 6c61-47d017d0-0000 | | 2616239327 |
| 4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 2 | 2026-04-04 03:14:21 | | cd34-974dae0f-0001 | 传感器_第四讲.pdf | 2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
4 rows in set (0.00 sec)
同样的去data目录看看

怎么样,是不是就多了一个文件。
那么我们接着发送语音消息

注意是按住来录音的
也确实是多了一个
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id | chat_session_id | user_id | message_type | create_time | content | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| 1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:19:56 | 你好,小刚!!!! | | | 0 |
| 2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:25:23 | 很高兴认识你 | | | 0 |
| 3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 1 | 2026-04-04 03:08:18 | | 6c61-47d017d0-0000 | | 2616239327 |
| 4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 2 | 2026-04-04 03:14:21 | | cd34-974dae0f-0001 | 传感器_第四讲.pdf | 2191602 |
| 5 | d105-c86d6bb0-0005 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 3 | 2026-04-04 04:37:18 | | adbf-9d8365c9-0003 | | 2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
5 rows in set (0.00 sec)

我们这里看看语音转文字,到语音哪里,点击鼠标右键

过一会

可以!!!!非常的完美。
我们登录到小刚这个用户这里来看看

非常完美!!!
我们最后来试试删除好友


我们点击OK

可以看到,聊天会话删除了,我们去服务器看看
可以看到,这些好友关系是删除了,但是这些聊天记录其实没有被删除
mysql> select * from chat_session;
0 rows in set (0.00 sec)
mysql> select * from chat_session_member;
0 rows in set (0.00 sec)
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id | chat_session_id | user_id | message_type | create_time | content | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| 1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:19:56 | 你好,小刚!!!! | | | 0 |
| 2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 | 0 | 2026-04-04 02:25:23 | 很高兴认识你 | | | 0 |
| 3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 1 | 2026-04-04 03:08:18 | | 6c61-47d017d0-0000 | | 2616239327 |
| 4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 2 | 2026-04-04 03:14:21 | | cd34-974dae0f-0001 | 传感器_第四讲.pdf | 2191602 |
| 5 | d105-c86d6bb0-0005 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 | 3 | 2026-04-04 04:37:18 | | adbf-9d8365c9-0003 | | 2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
5 rows in set (0.00 sec)


这些聊天记录还堆积在我们的服务器里面,这个是我们服务端的bug,我们会在后续进行改进
2.2.群聊
我们这里多创建2个用户来


我们登录进去小明这个账号


我们登录另外两个用户去同意一下
然后我们小明



我们勾选一下小红,然后点击完成

我们发现就多了一个群聊,我们可以去数据库看看
mysql> select * from chat_session;
+----+--------------------+-------------------+-------------------+
| id | chat_session_id | chat_session_name | chat_session_type |
+----+--------------------+-------------------+-------------------+
| 1 | 4bc8-8225709a-0000 | | 1 |
| 2 | bfa8-03fc60d6-0003 | | 1 |
| 3 | 9796-19b51835-0004 | | 1 |
| 4 | b139-7341d740-0005 | 新的群聊 | 2 |
+----+--------------------+-------------------+-------------------+
4 rows in set (0.00 sec)
mysql> select * from chat_session_member;
+----+--------------------+--------------------+
| id | chat_session_id | user_id |
+----+--------------------+--------------------+
| 1 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |
| 2 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |
| 3 | bfa8-03fc60d6-0003 | 8014-4d206743-0006 |
| 4 | bfa8-03fc60d6-0003 | d859-1c24c5ce-0007 |
| 5 | 9796-19b51835-0004 | 74a3-2b016880-0000 |
| 6 | 9796-19b51835-0004 | d859-1c24c5ce-0007 |
| 7 | b139-7341d740-0005 | d859-1c24c5ce-0007 |
| 8 | b139-7341d740-0005 | 74a3-2b016880-0000 |
| 9 | b139-7341d740-0005 | 8014-4d206743-0006 |
+----+--------------------+--------------------+
9 rows in set (0.00 sec)

当然,我们这里还没有实现下面3个功能
- 群聊名称的修改
- 退出群聊
- 新增加成员



完全没有问题!!!
可以说,我们的微服务即时通讯系统服务端是一点问题都没有的!!

