mc.context 上下文机制
更新时间:2025/06/27
在Gitcode上查看源码在涉及接口操作时,通常使用上下文传递本次调用的相关信息。mc.context
提供了一套完整的上下文体系,通常在北向接口生成上下文并向下传递,过程中的组件能随时获取到当前上下文,并利用其获取接口交互数据,用于记录操作日志、鉴权等。
加载方式
lua
local ctx = require 'mc.context'
接口说明
context.new
描述
- 创建上下文
参数
参数名 | 类型 | 描述 | 是否必选 |
---|---|---|---|
interface | string | 接口信息 | 可选 |
username | string | 用户信息 | 可选 |
client_addr | string | IP地址 | 可选 |
返回
- 上下文对象
异常
- 无
示例
lua
local context = require 'mc.context'
local ctx = context.new('IT', 'Admin', '127.0.0.1')
context.get_context
描述
- 获取上下文
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
co | thread | 协程id | 可选 |
返回
- 返回对应协程的上下文,co为nil时,默认获取当前上下文,返回值类型为table。若当前上下文为空,返回nil
异常
- 无
示例
lua
local context = require 'mc.context'
local ctx = context.get_context(co) -- 带参数
local ctx1 = context.get_context() -- 不带参数
ctx1.A = B -- 对当前上下文中的字段进行赋值
context.get_context_or_default
描述
- 获取上下文,无上下文则返回一个默认上下文
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
co | thread | 协程 | 可选 |
返回
- 返回对应协程的上下文。co为nil时,默认获取当前上下文,返回值类型为table。若上下文为空,创建新上下文并返回,返回值类型为table
异常
- 无
示例
lua
local context = require 'mc.context'
local ctx = context.get_context_or_default(co)
local ctx1 = context.get_context_or_default()
context.set_context
描述
- 设置上下文
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
ctx | table | 上下文 | 可选 |
co | thread | 协程,co为nil时,默认设置当前上下文 | 可选 |
返回
- 无
异常
- 无
示例
lua
local context = require 'mc.context'
context.set_context(ctx, co)
context.with_context
描述
- 临时切换到指定上下文,在回调结束后恢复原上下文
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
ctx | table | 上下文 | 必选 |
cb | function | 回调函数 | 必选 |
返回
- 无
异常
- 无
示例
lua
local context = require 'mc.context'
context.with_context(ctx, cb)
context.copy_context
描述
- 复制上下文
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
ctx | table | 上下文 | 可选 |
返回
- 返回复制的上下文,类型为table. ctx为nil时,默认复制当前上下文
异常
- 无
示例
lua
local context = require 'mc.context'
local new_ctx = context.copy_context(ctx)
context.is_empty
描述
- 上下文判空
参数
- 无
返回
- 返回判空结果,类型为
boolean
异常
- 无
示例
lua
local context = require 'mc.context'
local is_empty = ctx:is_empty()
context.get_initiator
描述
- 从上下文获取调用者信息
参数
- 无
返回
- 返回包含Interface、UserName、ClientIP信息的表
异常
- 无
示例
lua
log:operation(ctx:get_initiator(), 'LSW', 'Reset LSW Successfully')