Skip to content

Commit

Permalink
Merge pull request #19 from pwnsky/dev
Browse files Browse the repository at this point in the history
更新文档&脚本
  • Loading branch information
i0gan authored Sep 3, 2023
2 parents 5d4a84c + aa4b1e8 commit ea0cfb5
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 102 deletions.
79 changes: 33 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

近年来,随着互联网飞速发展,元宇宙引发了全球科技产业的高度关注和投资热潮,在这个元宇宙技术的领域里,服务端技术的高低决定了元宇宙发展的成熟度,一个高度可扩展、高性能、高可用的服务端框架用以支持元宇宙应用程序的开发和部署是本次研究的方向。pwnsky团队提出了一种面向元宇宙的分布式服务器框架设计与实现方法,为构建高性能、可扩展的元宇宙系统提供了理论基础和技术支持。通过对需求和特点进行了深入分析,本文明确了分布式服务端框架的设计目标和相关技术。用 C++和 Lua 语言共同编写此框架,将框架拆分成了内核层、节点层和业务层,提升程序的拓展性和可维护性。将业务功能拆分到不同节点上运行,以实现不同功能的解耦和资源的高效利用,利用动态负载均衡算法,可以在不同节点之间有效地分配任务,确保系统的稳定性和性能。最后,采用科学的方式对框架进行测试且给相应的实验数据,并将该框架运用在某商业项目中,也对所做的内容进行了总结和展望。

**Unity SDK: ** [squick-unity-sdk](https://github.com/pwnsky/squick-unity-sdk)

**Unreal SDK: **[squick-unreal-sdk](https://github.com/pwnsky/squick-unreal-sdk)

客户端SDK: [SquickClient](https://github.com/pwnsky/SquickClient)

中台: [squick-mid](https://github.com/pwnsky/squick-mid)
**后台: ** [squick-mid](https://github.com/pwnsky/squick-mid)

**讨论QQ群:739065686**

Expand All @@ -25,34 +25,35 @@



## 设计目标
## 项目例子

[生化密码](https://github.com/pwnsky/BiochemicalSecrets)

本次的设计目标是借鉴于 Bigworld 和 NoahGameFrame、UE4 、也参考了各大商业服务端框架引擎,提取各个框架的优点。

1. 能够提供超大规模用户访问支持,100W用户级别以上 【20%】
2. 提供稳定服务、保证服务的高可用 【0%】
3. 优化超低的CPU、内存、网络的占用【10%】
4. 拥有规范的测试,能够让开发人员自测各种性能指标(CPU、内存、网络)【0%】
5. 插件模块组合,让开发功能变成开发拓展的插件模块 【100%】
6. 解耦框架代码与业务项目代码【60%】
7. 日志系统,能够将日志异步写入到文件里,且在 Linux 环境下程序崩溃时,自动 Dump Stack 调用链写入崩溃文件 【100%】
8. 分布式服务,各服务之间通过网络来进行沟通,可通过分布式+集群方式减轻服务器压力 【50%】
9. 支持业务代码的热更新 【50%】
10. 支持主流的 Mysql、MongoDb、Redis 等数据库 【80%】
11. 支持跨平台,可以在 Windows、Linux 上编译和开发,在 Windows 上可以支持 VS 进行项目开发,不同平台的服务可以进行连接 【100%】
12. 支持 1 变 N 或 N 变 1,一个物理机上单个进程启动全部服务器,方便开发调试。不同物理机上启动单个或多个服务器 【100%】
13. 拥有比较完整的自动化工具,如自动化代码生成、编译、打包、部署、清理等等 【100%】
14. 支持主流的协议,如 HTTP/HTTPS、Websocket、TCP、UDP、KCP 等等 【60%】
15. 为了保证包的正确处理与不丢失,基于 TCP 之上,自定义双向 RPC 协议 【100%】
16. 可视化的抓协议包工具【0%】
17. 远程调试控制台【0%】
18. 数据库Lua接口提供【0%】
19. K8s适配【0%】
20. 同区节点所有节点负载状态自同步【50%】
21. 统一的数据库代理存取数据命令,使用简单协议能够便捷切换使用Mysql、Redis、MongoDb数据库 【10%】
22. Unity、UnrealEngine客户端SDK完善【50%】


## 设计目标

1. K8s集群【10%】
2. 同区节点所有节点负载状态自同步【80%】
3. 提供稳定服务、保证服务的高可用 【10%】
4. 优化超低的CPU、内存、网络的占用【20%】
5. 拥有规范的测试,能够让开发人员自测各种性能指标(CPU、内存、网络)【10%】
6. 插件模块组合,让开发功能变成开发拓展的插件模块 【100%】
7. 解耦框架代码与业务项目代码【60%】
8. 日志系统,能够将日志异步写入到文件里,且在 Linux 环境下程序崩溃时,自动 Dump Stack 调用链写入崩溃文件 【100%】
9. 分布式服务,各服务之间通过网络来进行沟通,可通过分布式+集群方式减轻服务器压力 【50%】
10. 支持业务代码的热更新 【50%】
11. 支持主流的 Mysql、MongoDb、Redis 等数据库 【80%】
12. 支持跨平台,可以在 Windows、Linux 上编译和开发,在 Windows 上可以支持 VS 进行项目开发【100%】
13. 支持 1 变 N 或 N 变 1,一个物理机上单个进程启动全部服务器,方便开发调试。不同物理机上启动单个或多个服务器 【100%】
14. 拥有比较完整的自动化工具,如自动化代码生成、编译、打包、部署、清理等等 【80%】
15. 支持主流的协议,如 HTTP/HTTPS、Websocket、TCP、UDP、KCP 等等 【60%】
16. 为了保证包的正确处理与不丢失,基于 TCP 之上,自定义双向 RPC 协议 【100%】
17. 可视化的抓协议包工具【0%】
18. 远程调试控制台【0%】
19. 数据库Lua接口提供【0%】
20. 统一的数据库代理存取数据命令,使用简单协议能够便捷切换使用Mysql、Redis、MongoDb数据库 【10%】
21. Unity、UnrealEngine客户端SDK完善【50%】

## 测试

Expand All @@ -70,7 +71,7 @@

<img src="./docs/images/server_to_server_rpc.png" alt="img" style="zoom: 33%;" />

# 安装
# 快速开始

## 开发流程建议

Expand Down Expand Up @@ -858,25 +859,11 @@ ref: https://clang.llvm.org/docs/ClangFormatStyleOptions.html



# 版本

1.0.0 :

date: 2023.03.10

Intro:

文档完善、代码解耦

登录与代理服务器完善

增加MongoDB作为游戏玩家数据存储

Redis改为Squick服务器之间的缓存

格式化代码为Google风格
## Friend link

增加gameplay服务器、cdn服务器、数据缓存服务器
[NoahGameFrame](https://github.com/ketoo/NoahGameFrame)

game服务器中的gameplay_manager模块游戏结束时自动释放gameplay
[Moon](https://github.com/sniper00/moon)

93 changes: 93 additions & 0 deletions docs/kubernetes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# kubernetes

## 环境搭建

本次k8s集群采用kind来进行搭建。

需要预先安装 go, docker



k8s学习:

doc: https://k8s.easydoc.net

bilibili: https://www.bilibili.com/video/BV1Tg411P7EB/

zhihu: https://zhuanlan.zhihu.com/p/616621837





### Linux

#### kind

ref: https://kind.sigs.k8s.io/

设置 go 代理

```
echo "export GO111MODULE=on" >> ~/.profile
echo "export GOPROXY=https://goproxy.cn" >> ~/.profile
source ~/.profile
```

设置path

```
echo "export PATH=$PATH:~/go/bin" >> ~/.profile
source ~/.profile
```

下载kind

```
go install sigs.k8s.io/[email protected] && kind create cluster
```



### Windows

#### kind

ref: https://kind.sigs.k8s.io/

设置go代理

```
SETX GO111MODULE on
go env -w GOPROXY=https://goproxy.cn,direct
SETX GOPROXY https://goproxy.cn,direct
```

下载kind

```
go install sigs.k8s.io/[email protected]
```

增加c:/Users/{user}/go/bin路径到环境变量

```
kind create cluster
```

#### kubectl

ref: https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/

```
curl.exe -LO "https://dl.k8s.io/release/v1.28.1/bin/windows/amd64/kubectl.exe"
```

下载好后,移动到环境变量中的目录里,这里可以移动到 ~/go/bin

查看pods

```
kubectl get pods
```

52 changes: 0 additions & 52 deletions docs/kubernets/README.md

This file was deleted.

8 changes: 7 additions & 1 deletion src/lua/node/lobby/player_mgr.lua
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,15 @@ function PlayerMgr:SendToPlayer(player_id, msg_id, data)
end

function PlayerMgr:OnReqPlayerData(player_id, msg_data, msg_id, fd)

local player = self.players[player_id]
if player == nil then
print("No this player " , player_id)
end

print("OnReqPlayerData, player_id: ", player_id)
local ack = {
account = '123456',
account = player.account,
player_id = player_id,
name = 'test',
level = 0,
Expand Down
1 change: 0 additions & 1 deletion tools/generate_config.bat
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ mkdir %client_config_path%\struct
mkdir %client_config_path%\lua
mkdir %client_config_path%\csharp

copy %config_path%\excel\Excel.cs %client_config_path%\csharp
xcopy /s /e /y %config_path%\ini %client_config_path%\ini
xcopy /s /e /y %config_path%\struct %client_config_path%\struct

Expand Down
6 changes: 4 additions & 2 deletions tools/proto2code.bat
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ rem Description: Generate proto code
set proto_bin=..\third_party\build\bin\protoc
set proto_path="..\src\proto"
set cpp_out_path="..\src\struct"
set csharp_out_path="..\client\csharp"
set lua_out_path=..\client\lua
set csharp_out_path="..\client\proto"
set lua_out_path="..\client\lua"

mkdir %csharp_out_path%

Expand All @@ -21,6 +21,8 @@ for %%f in (%proto_path%\*.proto) do %proto_bin% --cpp_out=dllexport_decl="WIN_
rem 删除多余的proto
del /f /q /s %csharp_out_path%\Server.cs
del /f /q /s %csharp_out_path%\DbProxy.cs
del /f /q /s %csharp_out_path%\PlayerEvent.cs
del /f /q /s %csharp_out_path%\GameMgr.cs

rem 生成Lua文件
mkdir ..\src\lua\proto
Expand Down

0 comments on commit ea0cfb5

Please sign in to comment.