Roblox 主从架构

Time:10 分钟

Roblox 使用主从架构,这也是一种多玩家游戏的通用框架。在你畅玩使用 Roblox 创作的游戏时,你的个人计算机、手机、平板电脑或游戏机就成为了客户端,游戏中的每一位其他独特玩家也各自是一个客户端。

游戏中的所有客户端(玩家)都会连接到一台功能强大的 Roblox 计算机(也就是所谓的服务器)。服务器就像是这个游戏的管理员 — 它会确保每位玩家看到和体验到的游戏世界与其他玩家完全相同。

https://developer.roblox.com/assets/blt4be5ef28af5c29b4/Client-Server-Model.png

客户端与服务器之间的通讯

在游戏过程中,服务器会不断更新已连接的客户端。例如,试想有一个游戏 Script 将白天变为午夜。Script 只能在服务器上运行,所以服务器是第一个看到日夜转变的地方。此时,服务器会自动通知所有客户端也更改它们的游戏时间。

客户端也可以与服务器进行对话。典型的情形就是当你按下设备(客户端)上的按钮/按键或其他控制键时,会告知服务器更新你在游戏世界中的游戏角色,这样所有其他玩家就能看到你所在的位置和正在进行的操作。

了解客户端与服务器脚本

在为游戏编写脚本时,客户端和服务器都能处理如下特定任务非常重要:

客户端代码

一般来说,客户端应检测玩家的输入,并向该特定玩家显示信息。例如,Articles/intro to player tools|玩家工具会响应玩家的输入并可能在服务器上触发更改,但它们首先会在客户端进行处理,以便向玩家提供实时反馈。同样,客户端的菜单、地图和其他 GUI 也应该由客户端代码进行管理。

客户端代码在 LocalScript 内运行。只有在 LocalScript 属于以下实例的子类时,此类代码才会开始运行:

  • 玩家的 Player/Character|Character (角色)模型

  • 玩家的 PlayerGui

  • 玩家的 Backpack

  • 玩家的 PlayerScripts 文件夹

  • Tool(仅限于由玩家装备的情况)

  • ReplicatedFirst 文件夹

服务器代码

游戏服务器应负责处理游戏逻辑、保存玩家数据、更新得分、创建部件等。决定此情形的原因包括以下几点:

  • 如果脚本代码会改变游戏世界(如创建或移除部件),服务器必须确保所有客户端看到同样的改变。

  • 如果玩家的生命值或得分由服务器进行控制,那么黑客就无法更改这些数值来影响其他玩家。

服务器代码在 Script 中运行。只有当 Script 属于以下实例的子类时,此类代码才会开始运行:

  • Workspace

  • ServerScriptService

  • 玩家的 Backpack

远程函数/事件

服务器会自动处理多项任务,但有时候你需要将游戏设计中所独有的特定指令发送到服务器。可以通过Articles/Remote Functions and Events|远程函数和事件Script|ScriptLocalScript|LocalScript 用于相互通讯的对象)来完成该目标。

Roblox官方链接:Roblox 主从架构