parent
da2700aa70
commit
3278d13e3e
Binary file not shown.
|
After Width: | Height: | Size: 2.5 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 472 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 739 KiB |
|
|
@ -0,0 +1,132 @@
|
|||
## PvE游戏
|
||||
|
||||
PvE是指玩家对战环境。在PvE游戏中,玩家会在开放世界中穿梭不同场景,以个人或者与其他玩家组队的方式和环境(npc/boss)交互。
|
||||
|
||||
PvE游戏特点:
|
||||
|
||||
- 尽管逻辑相同,但不同游戏服之间的配置大多有所差异。
|
||||
- 游戏服生命周期较长,开服后除更新外不轻易停机。
|
||||
- 随着时间推移,各个游戏服差异性逐渐明显,例如玩家数量、服务状态等。
|
||||
|
||||
OpenKruiseGame(OKG) 为PvE游戏提供的能力:
|
||||
|
||||
- 支持批量部署差异配置的游戏服。
|
||||
- 支持包括热更新在内的多种更新策略,避免不必要的停服动作、并尽可能地提高更新效率。
|
||||
- 支持游戏服的定向管理,对指定游戏服进行维护、下线、网络隔离等操作。
|
||||
|
||||
## 游戏案例
|
||||
|
||||
[minetest](https://github.com/minetest/minetest) 是一款开源沙盒类游戏,在这里使用minetest为大家演示如何利用OKG部署PvE游戏。
|
||||
|
||||
### 一键式部署
|
||||
|
||||
网络方面使用HostPort暴露游戏服务,部署了三个游戏服。
|
||||
|
||||
```bash
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: game.kruise.io/v1alpha1
|
||||
kind: GameServerSet
|
||||
metadata:
|
||||
name: mintest
|
||||
namespace: default
|
||||
spec:
|
||||
replicas: 3
|
||||
updateStrategy:
|
||||
rollingUpdate:
|
||||
podUpdatePolicy: InPlaceIfPossible
|
||||
network:
|
||||
networkType: HostPort
|
||||
networkConf:
|
||||
- name: ContainerPorts
|
||||
value: gameserver:30000/UDP
|
||||
gameServerTemplate:
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/minetest/minetest/server:latest
|
||||
name: gameserver
|
||||
EOF
|
||||
```
|
||||
等待一会后,三个游戏服全部Ready
|
||||
|
||||
```bash
|
||||
kubectl get gs
|
||||
NAME STATE OPSSTATE DP UP
|
||||
mintest-0 Ready None 0 0
|
||||
mintest-1 Ready None 0 0
|
||||
mintest-2 Ready None 0 0
|
||||
```
|
||||
|
||||
查看mintest-1的网络信息
|
||||
|
||||
```bash
|
||||
kubectl get gs mintest-1 -oyaml
|
||||
...
|
||||
status:
|
||||
networkStatus:
|
||||
createTime: "2022-12-08T11:28:29Z"
|
||||
currentNetworkState: Ready
|
||||
desiredNetworkState: Ready
|
||||
externalAddresses:
|
||||
- ip: 39.105.xxx.xxx
|
||||
ports:
|
||||
- name: gameserver-30000
|
||||
port: 8854
|
||||
protocol: UDP
|
||||
internalAddresses:
|
||||
- ip: 172.16.0.16
|
||||
ports:
|
||||
- name: gameserver-30000
|
||||
port: 30000
|
||||
protocol: UDP
|
||||
lastTransitionTime: "2022-12-08T11:28:29Z"
|
||||
networkType: HostPort
|
||||
...
|
||||
```
|
||||
|
||||
打开minetest客户端,输入对应服务IP端口,准备连接
|
||||
|
||||

|
||||
|
||||
玩家顺利进入游戏
|
||||
|
||||

|
||||
|
||||
### 定向下线
|
||||
|
||||
尽管使用workload批量管理了游戏服,但OKG支持对游戏服的定向下线。例如,我们下线mintest-1游戏服:
|
||||
|
||||
```
|
||||
kubectl edit gss mintest
|
||||
|
||||
...
|
||||
spec:
|
||||
replicas: 2 #副本数量减少1, 调整到2个
|
||||
reserveGameServerIds:
|
||||
- 1 #指定序号1
|
||||
...
|
||||
```
|
||||
|
||||
观察集群中游戏服变化情况,最终游戏服1下线,剩下0和2
|
||||
|
||||
```bash
|
||||
kubectl get gs
|
||||
NAME STATE OPSSTATE DP UP
|
||||
mintest-0 Ready None 0 0
|
||||
mintest-1 Deleting None 0 0
|
||||
mintest-2 Ready None 0 0
|
||||
|
||||
# 过了一会后
|
||||
|
||||
kubectl get gs
|
||||
NAME STATE OPSSTATE DP UP
|
||||
mintest-0 Ready None 0 0
|
||||
mintest-2 Ready None 0 0
|
||||
|
||||
```
|
||||
|
||||
接下来,或许你还需要:
|
||||
|
||||
- [游戏服热更新](../快速开始/游戏服热更新.md)
|
||||
- [游戏服更新策略](../用户手册/游戏服更新策略.md)
|
||||
- [自定义服务质量](../用户手册/自定义服务质量.md)
|
||||
- [网络模型](../用户手册/网络模型.md)
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
## PvP游戏
|
||||
|
||||
PvP游戏服为玩家提供战斗对局,常见的PvP游戏包括组队射击游戏、玩家卡牌对战、MOBA类游戏等。
|
||||
这类游戏对局通常持续几十分钟至几个小时不等,生命周期较短。
|
||||
|
||||
PvP游戏特点:
|
||||
|
||||
- 不同游戏服的配置是近似相同的
|
||||
- 游戏网络具有低延迟的需求
|
||||
- 游戏服生命周期短,波峰波谷的资源用量差距较大
|
||||
- 玩家进入哪个游戏服(游戏房间)由游戏匹配机制决定
|
||||
|
||||
OpenKruiseGame(OKG) 为PvP游戏提供的能力:
|
||||
|
||||
- 一键式游戏服部署
|
||||
- 低延迟的网络模型
|
||||
- 多种自动伸缩机制
|
||||
- 适配开源匹配框架
|
||||
|
||||
## 游戏案例
|
||||
|
||||
[xonotic](https://github.com/xonotic/xonotic) 是一款开源多人在线射击类游戏,在这里使用xonotic为例为大家演示如何利用OKG部署PvP游戏
|
||||
|
||||
网络方面使用HostPort暴露游戏服务,满足低延迟特性,同时部署了三个游戏服(房间)。
|
||||
|
||||
```bash
|
||||
cat <<EOF | kubectl apply -f -
|
||||
kind: GameServerSet
|
||||
metadata:
|
||||
name: xonotic
|
||||
namespace: default
|
||||
spec:
|
||||
replicas: 3
|
||||
network:
|
||||
networkType: HostPort
|
||||
networkConf:
|
||||
- name: ContainerPorts
|
||||
value: xonotic:26000/UDP
|
||||
updateStrategy:
|
||||
rollingUpdate:
|
||||
podUpdatePolicy: InPlaceIfPossible
|
||||
type: RollingUpdate
|
||||
gameServerTemplate:
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.cn-hangzhou.aliyuncs.com/acs/xonotic-demo:statble
|
||||
name: xonotic
|
||||
EOF
|
||||
```
|
||||
等待一会后,三个游戏服全部Ready
|
||||
|
||||
```bash
|
||||
kubectl get gs
|
||||
NAME STATE OPSSTATE DP UP
|
||||
xonotic-0 Ready None 0 0
|
||||
xonotic-1 Ready None 0 0
|
||||
xonotic-2 Ready None 0 0
|
||||
```
|
||||
|
||||
查看xonotic-1的网络信息
|
||||
|
||||
```bash
|
||||
kubectl get gs xonotic-1 -oyaml
|
||||
...
|
||||
status:
|
||||
networkStatus:
|
||||
createTime: "2022-12-08T12:12:36Z"
|
||||
currentNetworkState: Ready
|
||||
desiredNetworkState: Ready
|
||||
externalAddresses:
|
||||
- ip: 39.105.xxx.xxx
|
||||
ports:
|
||||
- name: xonotic-26000
|
||||
port: 8039
|
||||
protocol: UDP
|
||||
internalAddresses:
|
||||
- ip: 172.16.0.16
|
||||
ports:
|
||||
- name: xonotic-26000
|
||||
port: 26000
|
||||
protocol: UDP
|
||||
...
|
||||
```
|
||||
|
||||
打开xonotic客户端,输入对应服务IP端口,准备加入游戏。(市面上大多PvP游戏,玩家是进入游戏大厅后匹配其他玩家进入游戏,此处为简化示例而直接连接)
|
||||
|
||||

|
||||
|
||||
玩家顺利进入游戏
|
||||
|
||||

|
||||
|
||||
接下来,或许你还需要:
|
||||
|
||||
- [游戏服水平伸缩](../快速开始/游戏服水平伸缩.md)
|
||||
- [自定义服务质量](../用户手册/自定义服务质量.md)
|
||||
- [网络模型](../用户手册/网络模型.md)
|
||||
Loading…
Reference in New Issue