Web 服务器¶
当 Evennia 启动时,它还会启动其基于 Twisted 的 Web 服务器。Web 服务器负责提供游戏网站的 HTML 页面,也可以提供静态资源,如图像和音乐。
Web 客户端作为 Evennia 的 Server 进程的一部分运行。这意味着它可以直接访问游戏中修改的缓存对象,并且不会有处理数据库中暂时不同步对象的风险。
Web 服务器基于 Twisted,旨在用于生产环境。它利用了 Django Web 框架,并提供以下功能:
游戏网站 - 当你访问
localhost:4001
时看到的内容。网站的外观应根据你的游戏进行定制。用户登录网站后,如果通过 Web 客户端登录游戏,将自动登录游戏,因为它们共享相同的登录凭据(无法安全地对 Telnet 客户端进行自动登录)。Web 管理 基于 Django Web 管理,允许你在图形界面中编辑游戏数据库。
Web 客户端 页面由 Web 服务器提供,但实际的游戏通信(发送/接收数据)是通过页面上的 JavaScript 客户端直接打开到 Evennia Portal 的 WebSocket 连接完成的。
Evennia REST-API 允许从游戏外部访问数据库(仅在
REST_API_ENABLED=True
时)。
基本 Web 服务器数据流¶
用户在浏览器中输入 URL(或点击按钮)。这会导致浏览器向服务器发送一个包含 URL 路径的 HTTP 请求(例如,对于
https://localhost:4001/
,我们需要考虑的 URL 部分是/
)。其他可能的路径包括/admin/
、/login/
、/channels/
等。Evennia(通过 Django)将使用注册在
urls.py
文件中的正则表达式。这充当了到 视图 的重路由器,视图是能够处理传入请求的常规 Python 函数或可调用类(可以将这些视图类似于选择正确的 Evennia 命令来处理你的输入——在这个意义上,视图就像命令)。在/
的情况下,我们重路由到处理网站主页的视图。视图代码将准备网页所需的所有数据。对于默认的主页,这意味着收集游戏统计信息,以便你可以看到当前有多少人连接到游戏等。
视图接下来将获取一个 模板。模板是一个带有特殊“占位符”标签(通常写作
{{...}}
或{% ... %}
)的 HTML 文档。这些占位符允许视图将动态内容注入 HTML 中,使页面根据当前情况进行定制。对于主页,这意味着在 HTML 页面的正确位置注入当前的玩家数量。这称为“渲染”模板。结果是一个完整的 HTML 页面。(视图还可以以类似方式拉入一个 表单 来定制用户输入。)
完成的 HTML 页面被打包到一个 HTTP 响应 中并返回到 Web 浏览器,浏览器现在可以显示页面了!
关于 Web 客户端的说明¶
Web 浏览器还可以直接执行代码,而无需与服务器通信。这些代码必须写入/加载到网页中,并使用 JavaScript 编程语言编写(这是无法避免的,因为这是 Web 浏览器理解的语言)。执行 JavaScript 是 Web 浏览器的工作,它独立于 Evennia 运行。可以在页面上使用小段 JavaScript 来使按钮响应、制作小动画等,这些操作不需要服务器。
对于 Web 客户端,Evennia 将按上述方式加载 Web 客户端页面,但页面随后会启动负责实际显示客户端 GUI 的 JavaScript 代码,允许你调整窗口大小等。
启动后,Web 客户端会“呼叫主机”并启动一个到 Evennia Portal 的 WebSocket 链接——这就是所有数据交换的方式。因此,在 Web 客户端页面的初始加载后,直到关闭标签页并返回或在浏览器中手动重新加载之前,上述序列不会再次发生。