最佳实践
本文基于重构后的目标设计,仍属于设计阶段建议。
具体 API 返回值和调度语义见 运行时语义决策稿。
服务拆分
一个 Lua 服务处理一类业务,不要一个 API 一个服务。
lua
local M = {}
function M.join(player)
-- handle join
end
function M.leave(player)
-- handle leave
end
return M异步优先
优先使用 shield.send。只有需要结果时才使用 shield.call。
lua
shield.send("room", "player_joined", { player_id = "1001" })
local ok, result = shield.call_timeout(3000, "player", "get_info", { id = "1001" })网关逻辑
把网关当作 Lua 服务,而不是依赖框架中间件链。
lua
function gateway.on_client_message(session, payload)
if payload.type == "login" then
-- authenticate here
else
shield.send("router", payload.type, payload)
end
end数据访问
使用原始 DB / Redis 能力,不把业务模型绑定到 ORM。
lua
local rows = shield.db.query("SELECT * FROM users WHERE id = ?", { id })
shield.redis.publish("chat:world", { from = id, text = "hello" })配置
- YAML 只做绑定。
- 不把业务逻辑写进配置。
- 敏感信息优先通过环境或部署系统注入。
- 不依赖 discovery / metrics / plugin 等旧 core 字段。
日志
通过 shield.log.* 记录业务日志:
lua
shield.log.info("player login: " .. player_id)
shield.log.warn("heartbeat timeout: " .. player_id)
shield.log.error("load profile failed: " .. err)Prometheus、健康检查、集中监控不属于当前 core 最佳实践;需要时使用外部系统或后续独立扩展。