同步操作将从 zum/ts-gameframework 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
服务端自行部署
或使用 官方平台服务器
+ 游戏客户端对接 tsgf-sdk
MGOBE
)./servers/
目录下执行 npm install
(执行过一次即可)a) 开发环境最简启动
在 ./servers/
目录执行 npm run dev
(端口:7100,7101,7102,7801,7901 如果被占用将导致启动失败!)
b) 手动、分布式部署(生产环境时使用)
./servers/
目录下执行 npm run build
,然后复制出下列目录和文件:
deploy/
dist/
node_modules/ (不用此目录,则用 npm i 初始化)
package.json
tsgf.server.config.json
进阶:将 tsgf.server.config.json
文件复制多份,每份修改为一种服务的一个实例(配置参考),如下目录结构
servers/
deploy/
dist/
node_modules/
package.json
tsgf.hallServer.config.json
tsgf.gameServerCluster.config.json
tsgf.matchServerCluster.config.json
tsgf.gameServer01.config.json
tsgf.matchServer01.config.json
tsgf.demoServer.config.json
修改每个配置文件中的 runServer 节点,确定每个配置文件都要启动哪些服务实例
通过启动参数控制当前进程(实例)使用哪个配置文件,如 node dist/index.js -tsgfConfigFile="../tsgf.hallServer.config.json"
部署为系统服务
deploy/install_runasAdmin.cmd
即可(需修改其中的服务信息)pm2
微信小程序需注意,因微信平台要求访问的域名是固定的,所以就需要让游戏服务器走统一的反向代理。游戏服务器的地址使用url参数形式进行区分,由反向代理组件实现代理规则(如nginx)。比如:游戏服务器地址配置为:wss://game.a.com/?srv=n1&port=p
(game.a.com
为 nginx 服务器地址),nginx是支持根据url参数定义代理规则,实际地址是:ws://n1.game.a.com:p/
,然后 n1.game.a.com
解析为内网IP, 指向游戏服务器
核心客户端SDK包, 可不直接引用
客户端是浏览器环境时引用
客户端是小程序环境时引用
demoServer 的客户端封装
TSGF开放平台
的应用,一个开发者可以有多个应用,一般一个应用对应一个游戏,目前平台仅开放体验应用(限制流量),应用标识:default
, 密钥:FDGWPRET345-809RGKFER43SKGF
TSGF
的玩家体系,openId
为应用自己用户的唯一标识,通过服务端授权获得 TSGF
的玩家ID以及认证令牌(playerId, playerToken),用于 tsgf-sdk
的连接使用。demoServer
的角色。主要负责将应用自己的用户体系对接到 TSGF
的玩家体系应用的用户登录后,在应用的web服务器上请求 TSGF
大厅的服务端认证接口,获得玩家认证信息(playerId/playerToken等)
可参考 src/demoServer/api/ApiPlayerAuth.ts
由应用将玩家认证信息返回到客户端,用于客户端的所有需要认证的api
ICreateRoomPara.isPrivate
决定当前房间人不满时是否允许参与匹配(需配置 ICreateRoomPara.matcherKey)
matcherKey
:匹配器标识定义,不同匹配器的匹配请求之间不会互通。(内置匹配器标识 MatcherKeys
)matcherParams
:匹配器参数,根据不同的匹配器使用对应的类(请看 MatcherKeys
的注释)resultsContinueRoomJoinUsMatch
控制匹配成功是创建一个新房间时, 如果人未满,是否允许继续匹配满输入操作分离:与“我”无关的逻辑实现
其实只要是帧同步游戏,就需要做到上面说的设计
应用 一个开发者可以有多个应用,一般一个应用对应一个游戏。目前统一使用 default 应用标识
应用web服务器 为开发者自己实现用户体系的站点,用于将开发者的用户体系对接到 TSGF 的玩家体系
大厅服务器 为 HTTP 服务,可使用常规 web 集群方案进行部署,提供如玩家认证、创建房间、查询房间、匹配操作、分配游戏服务器等功能
游戏集群管理服务 为 websocket 服务,用来管理游戏服务器
的服务,只能部署一个实例
游戏服务器 为 websocket 服务,可以部署多台(横向拓展),部署实例的数量随着在线玩家数量增加而增加。需要能连接到游戏集群管理服务
,但实例之间并不进行通讯
匹配集群管理服务 为 websocket 服务,用来管理匹配服务器
的服务,只能部署一个实例
匹配服务器 为 websocket 服务,可以部署多台(横向拓展),部署实例的数量随着应用增加而增加(单应用场景,只需要部署一个实例即可)。需要能连接到匹配集群管理服务
,但实例之间并不进行通讯。
使用 TSRPC 作为通讯框架
并用 TSRPC
框架自带的代码生成/同步模块,导致 client
目录名以及相对路径的固定(乱改可能会导致出错)
匹配器
src/shared/tsgfServer/match/
src/shared/tsgfServer/match/IMatcher.ts
(可参考同目录下的 MatcherBaseMelee.ts
)src/shared/matchServer/BaseMatchServer.ts->onAssignTask
,加入本匹配器类的实例jsonschema
规范约束,因此在 vscode
中修改时有智能提示redisConfig
: 配置连接 redis
的信息(运行中修改配置文件时,服务实例会自动重新读取配置) 注意!redis 的认证模式不支持用户名为空的情况connString
: 配置连接各个数据库的字符串
appDb
: 配置连接到应用库的连接字符串hallServer
: 配置大厅服务
port
: 侦听的端口gameServerCluster
: 配置游戏集群管理服务
port
: 侦听的端口nodeList
: 本集群下的所有管理节点(运行中修改配置文件时,服务实例会自动重新读取配置)
clusterNodeId
: 节点ID, 集群内唯一clusterKey
: 本节点连接集群的密钥matchServerCluster
: 配置匹配集群管理服务
port
: 侦听的端口nodeList
: 本集群下的所有管理节点(运行中修改配置文件时,服务实例会自动重新读取配置)
clusterNodeId
: 节点ID, 集群内唯一clusterKey
: 本节点连接集群的密钥gameServer
: 游戏服务(运行中修改配置文件时,服务实例会自动重新读取配置)
clusterWSUrl
: 游戏集群管理服务的连接地址,如 ws://tsgf-servers:7101/
clusterNodeId
: 游戏集群中的节点id,需要和游戏集群管理服务的配置 gameServerCluster.nodeList[].clusterNodeId
一致clusterKey
: 游戏集群中的密钥,需要和游戏集群管理服务的配置 gameServerCluster.nodeList[].clusterKey
一致serverName
: 本游戏服务实例的名称,仅用于显示serverWSUrl
: 客户端连接本服务的地址,如 ws://127.0.0.1:7801/
extendData
: 可自定义拓展信息,any类型listenPort
: 侦听的端口(修改本配置需要重启服务实例)matchServer
: 匹配服务
clusterWSUrl
: 集群管理服务的连接地址,如 ws://tsgf-servers:7102/
clusterNodeId
: 集群中的节点id,需要和集群管理服务的配置 matchServerCluster.nodeList[].clusterNodeId
一致clusterKey
: 集群中的密钥,需要和集群管理服务的配置 matchServerCluster.nodeList[].clusterKey
一致serverName
: 本服务实例的名称,仅用于显示demoServer
: 模拟应用自己的WEB服务器,用于将应用自己的用户去映射到玩家,获得玩家的认证信息,以连接到 TSGF
的服务runServer
: string[] 决定当前实例启动时运行哪些服务Pomu Rainpuff Nijisanji EN by scuffward is licensed under Creative Commons Attribution.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。