refactor(lua): 简化 ngx API 表注册流程
将 ngx 表的创建和全局设置提前,避免各 API 注册时重复检查表是否存在。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
6b9df86217
commit
b31733f233
@ -30,9 +30,10 @@ func newNgxRespAPI(ctx *fasthttp.RequestCtx) *ngxRespAPI {
|
|||||||
// RegisterNgxRespAPI 在 Lua 状态机中注册 ngx.resp API
|
// RegisterNgxRespAPI 在 Lua 状态机中注册 ngx.resp API
|
||||||
// 这是主入口函数,由 LuaEngine 在初始化时调用
|
// 这是主入口函数,由 LuaEngine 在初始化时调用
|
||||||
func RegisterNgxRespAPI(L *glua.LState, api *ngxRespAPI) {
|
func RegisterNgxRespAPI(L *glua.LState, api *ngxRespAPI) {
|
||||||
// 获取已存在的 ngx 表,如果不存在则创建
|
// 获取已存在的 ngx 表(必须已设置全局)
|
||||||
ngx := L.GetGlobal("ngx")
|
ngx := L.GetGlobal("ngx")
|
||||||
if ngx == nil || ngx.Type() != glua.LTTable {
|
if ngx == nil || ngx.Type() != glua.LTTable {
|
||||||
|
// 如果不存在,创建新表并设置全局
|
||||||
ngx = L.NewTable()
|
ngx = L.NewTable()
|
||||||
L.SetGlobal("ngx", ngx)
|
L.SetGlobal("ngx", ngx)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -169,15 +169,11 @@ func (c *LuaCoroutine) setupSecureCoroutineLib() {
|
|||||||
// setupNgxAPI 创建 ngx API
|
// setupNgxAPI 创建 ngx API
|
||||||
// 注册 ngx.req、ngx.resp、ngx.var、ngx.ctx、ngx.log 和 ngx.socket API
|
// 注册 ngx.req、ngx.resp、ngx.var、ngx.ctx、ngx.log 和 ngx.socket API
|
||||||
func (c *LuaCoroutine) setupNgxAPI() {
|
func (c *LuaCoroutine) setupNgxAPI() {
|
||||||
// 检查是否已有 ngx 表(可能已由其他 API 注册)
|
|
||||||
existingNgx := c.Co.GetGlobal("ngx")
|
|
||||||
var ngx *glua.LTable
|
|
||||||
if existingTbl, ok := existingNgx.(*glua.LTable); ok {
|
|
||||||
ngx = existingTbl
|
|
||||||
} else {
|
|
||||||
// 创建 ngx 表
|
// 创建 ngx 表
|
||||||
ngx = c.Co.NewTable()
|
ngx := c.Co.NewTable()
|
||||||
}
|
|
||||||
|
// 先设置到全局,让所有注册函数使用同一个 ngx 表
|
||||||
|
c.Co.SetGlobal("ngx", ngx)
|
||||||
|
|
||||||
// 注册 ngx.req API
|
// 注册 ngx.req API
|
||||||
if c.RequestCtx != nil {
|
if c.RequestCtx != nil {
|
||||||
@ -203,9 +199,6 @@ func (c *LuaCoroutine) setupNgxAPI() {
|
|||||||
|
|
||||||
// 注册 ngx.socket API
|
// 注册 ngx.socket API
|
||||||
RegisterTCPSocketAPI(c.Co, c.Engine)
|
RegisterTCPSocketAPI(c.Co, c.Engine)
|
||||||
|
|
||||||
// 将 ngx 表设置到协程环境
|
|
||||||
c.Co.SetGlobal("ngx", ngx)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute 在协程中执行 Lua 脚本(支持 Yield/Resume)
|
// Execute 在协程中执行 Lua 脚本(支持 Yield/Resume)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user