Go to file
TONY_All 4db42f957c repackage 2023-05-04 21:46:09 +08:00
Controlled repackage 2023-05-04 21:46:09 +08:00
MasterControl repackage 2023-05-04 21:46:09 +08:00
api repackage 2023-05-04 21:46:09 +08:00
common repackage 2023-05-04 21:46:09 +08:00
gradle/wrapper init structure 2023-03-12 13:10:44 +08:00
.gitignore init repository 2023-03-11 12:50:37 +08:00
README.md repackage 2023-05-04 21:46:09 +08:00
build.gradle.kts repackage 2023-05-04 21:46:09 +08:00
gradle.properties init repository 2023-03-11 12:50:37 +08:00
gradlew init repository 2023-03-11 12:50:37 +08:00
gradlew.bat init repository 2023-03-11 12:50:37 +08:00
settings.gradle.kts rename 2023-05-04 21:18:04 +08:00

README.md

需求概述

  • 项目的主要业务需求:

    给定一个服务端模板开启n个服务器并在接口请求时返回可用服务器的地址。 管理在线服务器的数量。

  • 项目的非功能需求:

    分布式系统(会同时运行在多台机器上)

功能需求

  • 根据给定的服务端模板,可用端口范围生成多个服务器实例。
  • 回收已经标记为结束的服务器。
  • 接口请求时返回一个可用的服务器ip。
  • 记录对局的id开始时间结束时间参与玩家id到数据库中。

非功能需求

  • 可以增加机器的数量。例如有AB两台机器A机器资源占满B机器有余量。收到请求时会在B机器开启新的服务器并返回ip
  • 保持一定数量的可用服务器,在请求时可以立刻返回。

界面设计和交互

无ui需求bat就行。

接口需求

func getServer()

  • 接口描述提供模版类型获取一个可用的服务器ip并记录该对局的参与玩家。

  • 返回值:

    • String类型的ip地址带端口

    • Int类型的对局id

  • 参数列表:

    • List<Player> players
    • String type

func informEnd()

  • 接口描述:告知系统某个对局结束了

  • 返回值:无

  • 参数列表:

    • int id

func getPlayerServer()

  • 接口描述获取某个玩家还在进行中的对局的服务器的ip地址

  • 返回值:

    • String 类型的ip地址带端口未在对局中返回null
    • Int 类型的对局id未在对局中返回-1
  • 参数列表:

    • Player player

func containPlayer()

  • 接口描述:查询某个玩家是否在对局中。
  • 返回值:
    • bool
  • 参数列表:
    • Player player

数据库结构

  • match
id(int) start(datetime) end(datetime) players(text) type(varchar)
1 1678554776 1678554784 TONY_All,Sanseyooyea,PlayerA,PlayerB bedwars

API 使用

依赖:

dependencies {
    compileOnly("com.mohist.mistyrain:MultiServerMan-API:${version}")
}

使用:

List<ProxyPlayer> players;

        MultiServerManAPI api=MultiServerManAPIProvider.getAPI();
        api.getServer("default",players);

Q&A

  1. Q: 不同类型的服务端是怎么区分的

    A: 每个子端保留多种模版

  2. Q: 数据库类型

    A: MySQL / MariaDB

  3. Q: getServer是需要负责把玩家传到子服还是只是提供服务器并记录玩家

    A: 只提供服务器并记录玩家

  4. Q: 服务端启动方式

    A: 启动脚本,参数为端口+自定义参数