Skip to content

WebServer

云风 edited this page Jan 26, 2024 · 1 revision

基于 Web 的控制台

大多数游戏引擎都会内置一个控制台,方便在游戏运行时呼出,输入一些控制指令,查看引擎的内部状态。

Ant 引擎主要为移动设备设计,考虑到手机这样的设备并不适合控制台交互,所以并没有设计一个这样默认的控制台。当然,如果开发 PC 游戏的话,还是可以使用 imgui 制作一些调试界面的。

引擎给出的方案是:使用 Web 界面。为此,引擎提供了一个简单的 web server ,它支持基本的 http 协议,可以上传文件,浏览静态页面,执行动态程序(类似 CGI)。

web server 运行在一个 ltask 服务中,默认没有开启。

这是我们游戏中 web server 的启动代码:

local web = ltask.uniqueservice "ant.webserver|webserver"
ltask.call(web, "start", {
	mode = "indirect",  -- "direct"
	port = 9000,
	cgi = {
		debug = "vaststars.webcgi|debug",
		upload = "vaststars.webcgi|upload",
		texture = "vaststars.webcgi|texture",
	},
	route = {
		vfs = "vfs:/",
		log = "log:/",
		app = "app:/",
	},
	home = "vfs:/web",
})

mode 可以使用 indirect 和 direct 两种模式。一般在手机上使用 indirect ,所有网络连接都从 VFS 的 fileserver 转发,游戏 App 并不直接监听本地端口。对于 iOS 系统,网络连接会由开发机上的 iTunes 转发。如果使用 direct 模式,则监听本地端口。

vaststars.webcgi 是游戏代码内的一个 Package,它实现了一些供 webserver 调用的脚本,例如:http://webserver/debug 就会调用 "vaststars.webcgi|debug" 中的 get() 函数。

route 可以将 url 映射到文件系统中的路径上。目前提供三种文件系统:vfs 表示 vfs 系统下的路径,log 是本地的 log 目录,app 是 App 本地的可写目录,通常用于存放游戏存档,网络下载缓存等。此处的 vfs = "vfs:/" 可以让开发者通过 http://webserver/vfs 就能查看所有 vfs 中的文件。

home = "vfs:/web" 将网站的根指向 vfs 下的 /web 目录。

Clone this wiki locally