Skip to content

配置文件

框架服务器的启动依赖于四个关键配置文件,这些文件用于精确制定每个进程和服务器的配置。这些配置文件的设置对于框架的正常运行至关重要,确保各个组件能够有效地协同工作。

此外,还有框架网络协议配置文件,该文件用于定义网络协议。通过框架自带的导出工具,可以将协议导出为 C# 文件,以供项目使用。这种导出功能不仅提高了开发效率,还确保了项目与框架之间的兼容性,使开发人员能够更轻松地实现网络通信。

获取方式

仓库源代码

在仓库的根目录下Fantasy.Packages/Fantasy.Config/Config

配置文件目录结构

.
├─ Docs
├─ Fantasy.Packages/                                                          
  ├─ Fantasy.Config/
    └─ Config/ 
       ├─ NetworkProtocol/            # 网络协议配置文件
       ├─ Excel                       # Excel格式的4个启动配置文件
       └─ Json/                       # Json格式的4个启动配置文件
          └─ Server/
             ├─ MachineConfig.Json 
             ├─ SceneConfig.Json
             ├─ ProcessConfig.Json
             └─ WorldConfig.Json                        
  └─ Fantasy.NLog                                                             
└─ README.md

NuGet

# 安装方式一:使用以下命令安装包
dotnet add package Fantasy-Net.Config
# 安装方式二:通过 NuGet 包管理工具搜索 Fantasy-Net.Config 进行安装。
安装完成后,系统将在项目的根目录下自动创建一个名为“Config”的文件夹。该文件夹内的文件结构将与跳转到配置文件目录结构所示的结构完全相同,以便于用户进行后续的配置和管理。

四个启动配置文件

MachineConfig

框架支持分布式部署和运行,因此需要一个专门的配置文件,用于定义各个服务器的相关信息。MachineConfig 文件正是为此设计的,它负责管理和配置这些服务器的信息,使整个分布式系统能够顺利运行。

Id

配置的Id,不可以重复。

OuterIP

外网的IP地址,主要用于客户端连接服务器使用。

请确保填写的IP地址是实际分配的公网IP,而非内网地址,以避免连接失败。此外,检查该IP地址是否已配置防火墙规则,允许必要的端口开放,从而确保外部访问的顺畅性。

OuterBindIP

服务器需要绑定一个外网IP地址,这个IP地址将用于服务器上的Socket通信。通过绑定该IP地址,可以确保服务器能够在外部网络中正确地接收和发送数据包,从而实现对外提供服务或进行数据传输的功能。

怎么找到需要绑定的IP?
  • 物理服务器在通常情况下,物理服务器的网卡IP即为公网IP,因此可以直接绑定该公网IP,无需额外配置。

  • 云服务器在直接绑定公网IP可能会失败,因为云服务器实际上是通过外部网关或负载均衡器转发流量到内部服务器。因此,需要绑定到内网IP。

  • 上述两种情况并不能涵盖所有服务器的类型,因此最简单的方法是通过使用 ipconfig 或 ifconfig 命令查看服务器的网卡信息,找到网卡对应的IP地址。将服务绑定到该IP地址,通常可以确保没有问题。

InnerBindIP

在框架服务器之间的通信中,同样需要配置一个专门的通信地址。因为有些服务器并不对外开放,只在内部进行通信,因此我们需要为这些服务器配置一个专门用于内部通信的地址,以确保通信的安全性和稳定性。

WorldConfig

框架支持在同一台服务器上针对不同区域(例如游戏中的一区、二区)独立运行,也可以配置特定地区的功能。这些功能设置都需要在此文件中进行配置和管理。

Id

配置的Id,不可以重复。

DbConnection

每个区域都有一个独立的数据库,用于存储和管理该区域内的数据。为此,需要配置相应的数据库连接字符串,以确保系统能够正确访问和操作数据库。如果某个区域不需要使用数据库,可以选择不填写连接字符串,系统将跳过该区域的数据库连接配置。

DbName

数据库名称。

DbType

目前仅支持MongoDB。

ProcessConfig

服务器以进程(Process)为单位进行管理,每个进程可以包含多个线程(Scene)。通过将服务器的管理架构分为进程和线程两个层次,不仅能够更高效地配置系统资源,还能更好地实现功能的分离和管理。这样设计的好处在于,进程之间相互独立,避免了资源争夺和冲突问题,而线程之间的灵活性则使得系统在处理多任务时更加高效。

Id

配置的Id,不可以重复。

MachineId

指定进程所在服务器的位置信息。这里添加的是 MachineConfig 配置中的 Id 字段,该字段用于唯一标识服务器的位置或配置。

StartupGroup

在默认情况下,发布到平台上的应用只能通过参数启动单个Process。然而,如果设置了启动组(Startup Group),就可以通过一个启动参数同时启动多个Process。这使得多进程任务的管理更加灵活和高效。

SceneConfig

框架是以Scene为单位的用于配置服务器内每个功能或某一场景下的Scene

Id

Scene的Id必须满足以下区间条件:

  • Id值不能小于 当前WorldConfigId * 1000 + 1。
  • Id值不能大于 当前WorldConfigId * 1000 + 255。
  • 换句话说,Scene的Id必须在 [当前WorldConfigId * 1000 + 1, 当前WorldConfigId * 1000 + 255] 之间。
ProcessConfigId

进程ID与ProcessConfig.xlsx文件关联,用于表示该进程包含的Scene数量。具体来说,ProcessConfig.xlsx文件中记录了每个进程的相关配置,包括进程ID及其对应的Scene数量。这使得通过该文件能够清晰地了解到每个进程下包含的具体场景数量。

WorldConfigId

请关联并填写 WorldConfig.xlsx 表,以明确该场景所属的世界。此字段为必填项,不得留空,确保每个场景都准确归属到相应的世界。

SceneRuntimeType

用于配置 Scene 在框架中的运行方式,主要有以下几种模式:

  • MainThread:设置 Scene 在当前进程的主线程中运行。如果多个 Scene 使用相同的 ProcessConfigId,那么它们会共享同一个主线程。这种配置适合对效率要求较高的场景,可以通过配置多个进程(即多个 Process),分别对应不同的 Scene,从而实现多进程单线程的运行模式。
  • MultiThread:设置 Scene 在一个独立的线程中执行。然而,需要注意的是,如果已经配置了 ThreadPool,最好不要将其他 Scene 设置为 MultiThread,以避免资源抢占问题。如果 Scene 的执行时间较短,可以忽略此问题。
  • ThreadPool:根据服务器的 CPU 核心数创建线程池,Scene 会在这些线程中运行。此配置的优势在于避免了因线程过多而导致的资源竞争,特别适用于单服务器多进程的场景,在这种情况下,可以通过将多个 Scene 运行在同一个进程中来优化资源利用率。
SceneTypeString

用于描述该场景的类型。这一类型可以在 SceneConfig.xlsx 文件中的 SceneTypeConfig 工作薄中进行配置。

  • 通过在 SceneConfig.xlsx 文件的 SceneTypeConfig 工作薄中配置场景类型,用户可以为不同的场景指定相应的类型属性,从而确保场景在应用中得到准确的分类和处理。这一配置支持多种类型的定义和扩展,满足不同应用场景的需求。
NetworkProtocol

用于表示当前场景可以接收的网络协议:

  • KCP: 一种基于UDP的可靠传输协议,能够在保证数据传输可靠性的同时,提供更低的延迟,适合对实时性要求较高的场景。
  • TCP: 经典的面向连接的传输控制协议,广泛用于确保数据在复杂网络环境中的可靠传递。
  • WebSocket: 常用于WebGL平台的双向通信协议,支持浏览器与服务器之间的全双工通信,特别适合需要实时数据交互的应用。
  • HTTP: HTTP是用于服务器端的接收和处理请求的协议,通常应用于Web API等场景,常用于开发Web应用程序和网站后端。

如果当前场景不需要接收特定网络协议的通信,您可以选择不配置此选项,默认情况下留空即可。这样系统将不会为该协议开启通信通道,从而简化配置和系统资源的使用。

OuterPort

用于指定接收发送端协议的端口号。如果该字段留空或设置为0,表示接收端不会启动监听功能,也即无法接收来自发送端的消息。

InnerPort

用于指定接收和发送端服务器之间连接的端口号。如果此处不填写或填写为0,则表示不会开启监听,即不接收来自其他服务器发送端的消息。

SceneType

SceneTypeString 列的值是根据公式自动生成的,无需手动修改。如果需要修改,只需在 SceneTypeString 列中进行选择即可。