# SynergySpot **Repository Path**: fuquanyuo/SynergySpot ## Basic Information - **Project Name**: SynergySpot - **Description**: 一款即时通讯软件 | 🎇 仿 QQ NT | 🎇 基于ElaWidgetTool仿fluent ui框架 | 🎇 Linux后端及可跨平台客户端 | - **Primary Language**: C++ - **License**: MIT - **Default Branch**: V0.10 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-11 - **Last Updated**: 2025-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
SynergySpot 是一款以 QQ9 为参考并精心打造的聊天软件,力求提供丰富的功能和完善的用户体验。
中文名 “灵犀一点”,源自诗句"心有灵犀一点通",形容即时的心灵沟通。
# 系统架构图
# 部署项目
**本项目分为两个部分:客户端(src)与服务端(server)**
本项目部署缺少的依赖可以参考CMakeLists.txt即src/CMakeLists.txt、server/CMakeLists.txt
## 服务端部署
**服务端确保在Linux环境下且CMake版本>= 3.x.x;编译套件支持C++11及以上版本**
```CMakeLists
set(CMAKE_PREFIX_PATH "/root/grpc_install")
# you need install grpc
find_package(Threads REQUIRED)
find_package(Protobuf REQUIRED)
find_package(gRPC REQUIRED)
find_package(absl REQUIRED)
```
- 服务端目前开放测试环境为 `ubuntu 22.04` 且将基于该版本的所有库文件放于 `/src/lib-common/lib/Linux` 下,也可使用 `docker-compose` 进行一键部署 (推荐)
- 使用在项目下的 `.gitmodule` 文件可以配置到对应的 `grpc` 版本以及对应的 `protobuf` 版本,通过官方示例教程可以进行编译得到 `grpc_install` 文件夹
- 项目使用的Protobuf版本为`3.19.5`:如果改换版本需要根据.proto文件重新生成protofile目录下的*.cc及*.h文件
- CURL版本为8.7.1
⚠ find_package的使用需要依赖提供 `*.cmake` 文件,也可以自行更改 CMakeLists 指定好库文件目录及头文件目录
## 客户端部署
**客户端确保Qt版本为6.x.x;项目当前V0.0.1编译套件使用 `msvc`**
⚠ 注意src/CMakeLists.txt需要修改,将其改为Qt msvc编译套件的绝对路径;
```CMakeLists
set(CMAKE_PREFIX_PATH "D:/QT/6.5.3/msvc2019_64")
```
- 若存在多个Qt版本环境,建议使用cmake前缀指定路径
- ⚠ 客户端需要在IDE中配置两个宏 `SS_CLINET` 以及 `SS_CLIENT_WIN` (后续开放SS_CLIENT_LINUX) ⚠
- 若编译后出现运行时闪退,可以使用 debug 查看缺少的 dll,一般情况下 cmake 会将位于 `/src/lib-common/lib/Win` 下的所有 dll 放于 `/src/out/{CMAKE_BUILD_TYPE}` 下,若出现崩溃可以尝试重新生成 cmake 缓存或者直接手动复制 dll
- 若出现编译过程中的 `.qrc` 文件的相关报错,可能是因为 cmake 在写入 `.qrc` 时存在并行冲突,删除任意 `.qrc` 中的内容重新生成即可解决
## 配置文件
**上述的依赖解决后,更改src/conf/clientInfo-example.yaml以及src/conf/serverInfo-example.yaml中的内容并更改文件名为clientInfo.yaml和serverInfo.yaml**
需要更改的内容:
```yaml
# clientInfo.yaml
server-host-info:
ip: [服务端部署地址]
port: [服务端端口]
open-webui-info:
url: [部署的`open webui`项目所在url]
trtc-api:
sdkAppId: [腾讯 TRTC 服务ID]
# serverInfo.yaml
mysql-info:
ip: [服务端MySQL服务IP]
port: [服务端MySQL端口]
userName: [MySQL用户名]
password: [MySQL用户密码]
host-info:
listenPort: [服务端监听端口]
email-info:
sendAccount: [发送邮件邮箱]
emailServer: smtp://smtp.qq.com:587
accessToken: [邮箱授权码]
realtime-info:
grpcIP: "0.0.0.0"
grpcPort: [grpc服务端端口]
maxRetryCount: 5
fileSavePath: [服务端文件存储路径]
trtc-api:
sdkAppId: [腾讯 TRTC 服务ID]
sdkSecretKey: [腾讯 TRTC 服务KEY]
```
**执行SQL脚本**
在MySQL服务中执行doc/数据库/synergy_spot.sql 及 doc/数据库/synergy_spot_init.sql
# 技术部分
## ! Protobuf 做序列化网络传输
- 可与其他高级语言做兼容、扩展
- 其本质是二进制代码,服务器和客户端对于信息处理更快
## 客户端
- `Qt6.6.3`
- `Network`、`OpenGLWidgets`、`WebEngineWidgets`
- `ElaWidgetTools`
- `grpc v1.46.5` -> `protobuf v3.19.5`
- `sqlcipher`
- `yaml`
- `trtc`
- `opencv v4.90`
- `openssl`
## 服务端
- `epoll` + `c++11 线程池`
- `grpc v1.46.5` + `protobuf v3.19.5`
- `mysql`
- `yaml`
- `curl`
- `openssl`
- [ ] `redis`
## 中间件及管理技术栈
- `cmake`
- `docker`
- `shell`
- `bat`
## 数据库
- Mysql作为云端的存储数据库
- SQLite作为本地的聊天记录存储数据库
## 特别感谢
本项目的开发离不开社区的开源维护者,特此感谢:
|依赖|版本|备注|
|---|---|---|
|ElaWidgetTools|-|https://github.com/Liniyous/ElaWidgetTools|
|GRPC|V1.46.5|https://github.com/grpc/grpc|
|Protobuf|V3.19.5|https://github.com/protocolbuffers/protobuf|
|sqlcipher|V4.6.1|https://github.com/sqlcipher/sqlcipher|
|curl|V8.7.1|https://github.com/curl/curl|
|MySQL|V8.0.20|https://www.mysql.com/cn/|
|Json|V3.11.3|https://github.com/nlohmann/json|
|Qt|V6.5.3|https://www.qt.io/zh-cn/|
# 功能部分
## 跨域通信
- 使用C/S架构:客户端通过Protobuf封装业务DTO;服务端业务驱动完成数据处理
- 聊天信息的备份:聊天信息在服务端通过MySQL持久化;在本地通过SQLite3持久化
### 点对点模式
- 即好友聊天,通过筛选唯一的ID值来添加好友进行聊天
### 点对面模式
- 即群聊模式,通过筛选唯一的群ID值来进行加入群聊进行聊天
## 文件上传/下载
- 用户上传文件至服务器/用户从服务端下载文件
## 流媒体传输(V0.0.1b版本开始采用腾讯云的 TRTC 音视频接口)
- 实时音视频通话
## 接入GPT(V0.0.1b版本采用使用 QtWebEngine 渲染部署的 open-webui 项目)
- 配置相关的API信息
# 效果图
- 登录界面

- 注册界面
- 聊天界面
- 添加好友界面
- 音视频界面
# 问题联系
`QQ: 1299254642`