- 任务管理API
- Action
- 创建任务
- 更新任务
- 删除任务
- 获取任务记录
- 获取任务列表
- 校验脚本(新版本支持)
- 更新令牌
- 执行任务
- 获取执行任务结果
- 获取执行任务结果列表
- 停止执行任务
- 获取执行任务日志信息(ws/tcp,不支持http)
- 调试脚本(新版本支持)
- Lua自定义函数
- Http
- API
- http.get(url [, options])
- http.post(url [, options])
- http.request(method, url [, options])
- 5.1.4http.response
- JSON
- API
- json.encode(data)
- json.decode(data)
- Log
- API
- log.info(data)
- Exmath
- API
- exmath.max(data)
- exmath.min(data)
- exmath.sum(data)
- exmath.average(data)
- exmath.var(data)
- exmath.std(data)
- global_channel
- global_channel.create(name,n)
- global_channel.destroy(name)
- global_channel.getllist()
- global_channel.push(name,data)
- global_channel.pop(name)
- 简单示例
- 第一个Lua脚本执行发送函数
- 第二个Lua脚本执行接收函数
- 注意事项
任务管理API
Mixtask 是Mixiot 任务管理服务,是一个任务管理与执行器。Mixtask 以 Lua 程序脚本方式建立不同的可执行任务,提供 Mixiot 其他应用服务调用执行。
Mixtask 服务除了Lua 基本语法逻辑、还定义Mixiot相关命令函数,支持实现mixiot相关操作。
Action
创建任务
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | create_task | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 否 | String | 最多64个字符,唯一 | 自定义唯一标识,不填则系统生成 |
name | 是 | String | 最多64个字符 | 名称,显示名称 |
description | 否 | String | 最多255个字符 | 描述 |
script | 是 | String | 脚本 | |
onlyone | 否 | int | 只能0/1 | 任务是否只可同时运行一个,默认为0,不限定 |
reference | 否 | String | 最多64个字符 | 参考号 |
示例
{
"action":"create_task",
"actionid": "2021-06-09",
"uid": "test",
"name": "测试",
"description": "测试",
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"onlyone":1,
"reference": ""
}
响应
{
"resp": "create_task",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "test",
"name": "测试"
}
}
更新任务
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | update_task | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 自定义唯一标识 |
name | 是 | String | 最多64个字符 | 名称,显示名称 |
description | 否 | String | 最多255个字符 | 描述 |
script | 是 | String | 脚本 | |
onlyone | 否 | int | 只能0/1 | 任务是否只可同时运行一个,默认为0,不限定 |
reference | 否 | String | 最多64个字符 | 参考号 |
示例
{
"action":"update_task",
"actionid": "2021-06-09",
"uid": "TASK1691200100005",
"name": "关机任务",
"description": "指定设备进行远程关机",
"script": "",
"onlyone":0,
"reference": ""
}
响应
{
"resp": "update_task",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "TASK1691200100005",
"name": "关机任务"
}
}
删除任务
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | delete_task | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 任务编号 |
示例
{
"action":"delete_task",
"actionid": "2021-06-09",
"uid": "TASK1691200100005"
}
响应
{
"resp": "delete_task",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "TASK1691200100005"
}
}
获取任务记录
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | get_task_item | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 任务编号 |
示例
{
"action":"get_task_item",
"actionid": "2021-06-09",
"uid": "ccc"
}
响应
{
"resp": "get_task_item",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "ccc",
"name": "ccc",
"description": "test",
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"onlyone":1,
"checksum": "337a26e20b76d064bed31101151b8d65",
"token": "f95abbe6-4e11-05ce-ac4d-de1f7d60d236",
"reference": "",
"created": "2021-07-12 15:54:38",
"created_by": "",
"last_modified": "",
"last_modified_by": ""
}
}
获取任务列表
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | get_task_list | 方法名 |
actionid | 否 | String | 请求标识 |
示例
{
"action":"get_task_list",
"actionid": "2021-06-09",
}
响应
{
"resp": "get_task_list",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": [
{
"uid": "ccc",
"name": "ccc",
"description": "test",
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"onlyone":1,
"checksum": "337a26e20b76d064bed31101151b8d65",
"token": "f95abbe6-4e11-05ce-ac4d-de1f7d60d236",
"reference": "",
"created": "2021-07-12 15:54:38",
"created_by": "",
"last_modified": "",
"last_modified_by": ""
},
{
"uid": "test",
"name": "测试",
"description": "测试",
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"onlyone":1,
"checksum": "337a26e20b76d064bed31101151b8d65",
"token": "7b3aa44f-4b34-b652-b856-e862389c87f2",
"reference": "",
"created": "2021-07-12 17:27:21",
"created_by": "",
"last_modified": "",
"last_modified_by": ""
}
]
}
校验脚本(新版本支持)
该接口实现对 Lua脚本的语法检验(解析器检验),如添加、编辑任务 先编辑校验再保存。
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | check_script | 方法名 |
actionid | 否 | String | 请求标识 | |
script | 是 | String | 脚本 |
示例
{
"action":"check_script",
"actionid": "2021-06-09",
"script": ""
}
响应
{
"resp": "check_script",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"checkrule": 1,
"message": "检查成功"
}
}
更新令牌
更新任务的 Token
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | update_token | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 任务编号 |
示例
{
"action":"update_token",
"actionid": "2021-06-09",
"uid": "ccc"
}
响应
{
"resp": "update_token",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"token": "c2fb4aca-c115-5a3f-353b-f93b7db81c44",
"uid": "ccc"
}
}
执行任务
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | exec_task | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 任务编号 |
args | 是 | json | 参数列表 | |
source | 是 | String | 最多64个字符 | 调用来源,如workflow |
token | 是 | String | 任务校验令牌 |
示例
{
"action":"exec_task",
"actionid": "2021-06-09",
"uid":"ccc",
"args":{"data":"aaa"},
"source":"aaaaa",
"token":"5c00c2c9-2a29-971e-bb7f-8b4476f63446"
}
响应
{
"resp": "exec_task",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "RECORD1725270300001"
}
}
获取执行任务结果
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | get_record_item | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 执行任务的编号 |
示例
{
"action": "get_exec_record_item",
"actionid": "2021-06-09",
"uid": "RECORD1725270300001"
}
响应
{
"resp": "get_exec_record_item",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {
"uid": "RECORD1725270300001",
"task_id": "ccc",
"source": "aaaaa",
"ip": "",
"args": {
"data": "aaa"
},
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"exec_time": "2021-07-12 18:00:53",
"code": "200",
"message": "",
"is_finish": 0,
"reference": "",
"last_modified": "2021-07-12 18:00:54"
}
}
获取执行任务结果列表
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | get_record_list | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 任务编号 |
示例
{
"action": "get_record_list",
"actionid": "2021-06-09",
"uid": "ccc"
}
响应
{
"resp": "get_record_list",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": [
{
"uid": "RECORD1725270300001",
"task_id": "ccc",
"source": "aaaaa",
"ip": "",
"args": {
"data": "aaa"
},
"script": "\nlocal log = require(\"log\")\nlocal json = require(\"json\")\nlocal http = require(\"http\")\nlocal math = require(\"math\")\nlocal exmath = require(\"exmath\")\nlog.info('test log')\na = {1,2,3,4.5}\nlog.info(exmath.max(a))\nlog.info(exmath.min(a))\nlog.info(exmath.sum(a))\nlog.info(exmath.average(a))\nlog.info(exmath.var(a))\nlog.info(exmath.std(a))\n \nresponse, error_message = http.post(\"http://192.168.88.88:31507/apiproxy/api\", {\n\tbody='{\"action\":\"get_object_list\"}'\n})\nprint(response[\"body\"],error_message)\n\nprint(a,math.pi)\nmath.randomseed(os.time())\na=math.random(100)\nprint(data)\nlog.info(data)\nlog.info(data[\"data\"])\n\t",
"exec_time": "2021-07-12 18:00:53",
"code": "200",
"message": "",
"is_finish": 0,
"reference": "",
"last_modified": "2021-07-12 18:00:54"
}
]
}
停止执行任务
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | stop_task | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 执行任务的编号 |
示例
{
"action": "stop_task",
"actionid": "2021-06-09",
"uid": "RECORD1794925800001"
}
响应
{
"resp": "stop_task",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {}
}
获取执行任务日志信息(ws/tcp,不支持http)
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | exec_log | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 执行任务的编号 |
示例
{
"action": "sub_task_log",
"actionid": "2021-06-09",
"uid": "RECORD1794925800001"
}
响应
{
"resp": "sub_task_log",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {}
}
调试脚本(新版本支持)
建立tcp长连接通道,调试查看脚本执行记录(类似cli通道)
参数
参数名称 | 是否必选 | 数据类型 | 数据约束 | 描述 |
---|---|---|---|---|
action | 是 | String | dubug_script | 方法名 |
actionid | 否 | String | 请求标识 | |
uid | 是 | String | 最多64个字符,唯一 | 任务编号 |
args | 是 | json | 参数列表 |
示例
{
"action":"dubug_script",
"actionid": "2021-06-09",
"uid": "TASK1691200100005",
"args": {}
}
响应
{
"resp": "dubug_script",
"actionid": "2021-06-09",
"code": 200,
"msg": "成功",
"result": {}
}
Lua自定义函数
在使用之前使用require引用该模块
Http
API
http.get(url [, options])
参数
名称 | 类型 | 描述 |
---|---|---|
url | String | 请求url |
options | Table | 可选项 |
可选项
名称 | 类型 | 描述 |
---|---|---|
query | String | URL编码的查询参数 |
cookies | Table | 附加cookies |
headers | Table | 附加headers |
timeout | Number/String | 请求超时。秒数或字符串,如”1h” |
返回值
http.response or (nil, error message)
用例
local http = require("http")
response,error_message = http.get("https://baidu.com")
print(error_message,response["body"])
http.post(url [, options])
参数
名称 | 类型 | 描述 |
---|---|---|
url | String | 请求url |
options | Table | 可选项 |
可选项
名称 | 类型 | 描述 |
---|---|---|
query | String | URL编码的查询参数 |
cookies | Table | 附加cookies |
body | String | 请求体 |
form | String | 弃用。URL编码的请求体。 需要设置请求header Content-Type 为 application/x-www-form-urlencoded |
headers | Table | 附加headers |
timeout | Number/String | 请求超时。秒数或字符串,如”1h” |
返回值
http.response or (nil, error message)
用例
local http = require("http")
local json = require("json")
token_response = http.post("http://192.168.88.87/http/user/login", {form="username=admin&password=Mix@pwd"})
response, error_message = http.post("http://192.168.88.88:31507/apiproxy/api", {
body='{"action":"get_object_list"}',
headers={
["Content-Type"]="application/json",
["Authorization"]="Bearer " .. json.decode(token_response["body"])["result"]["token"]
}
})
print(error_message,response["body"])
http.request(method, url [, options])
参数
名称 | 类型 | 描述 |
---|---|---|
method | String | 请求方法 |
url | String | 请求url |
options | Table | 可选项 |
可选项
名称 | 类型 | 描述 |
---|---|---|
query | String | URL编码的查询参数 |
cookies | Table | 附加cookies |
body | String | 请求体 |
form | String | 弃用。URL编码的请求体。 需要设置请求header Content-Type 为 application/x-www-form-urlencoded |
headers | Table | 附加headers |
timeout | Number/String | 请求超时。秒数或字符串,如”1h” |
返回值
http.response or (nil, error message)
5.1.4http.response
包含关于已完成的HTTP请求的响应信息
参数
名称 | 类型 | 描述 |
---|---|---|
body | String | 响应体 |
body_size | Number | 响应体的大小(以字节为单位) |
headers | Table | 响应headers |
cookies | Table | 响应cookies |
status_code | Number | 响应状态码 |
url | String | 请求在重定向后指向的最终URL |
JSON
API
json.encode(data)
将值编码为JSON字符串。如果无法对值进行编码,则返回nil和错误字符串。
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 将表转换为JSON字符串 |
返回值
JSON string or (nil, error message)
用例
local json = require("json")
data='{"username": "admin", "password": "Mix@pwd", "action": "login"}'
print(json.encode(data) ) --"{\"username\": \"admin\", \"password\": \"Mix@pwd\", \"action\": \"login\"}"
json.decode(data)
解码JSON字符串。如果无法对值进行解码,则返回nil和错误字符串。
参数
名称 | 类型 | 描述 |
---|---|---|
data | String | 解码到JSON表的JSON字符串 |
返回值
table or (nil, error message)
用例
local json = require("json")
data='{"username": "admin", "password": "Mix@pwd", "action": "login"}'
print(json.decode(json.encode(data))) --{"username": "admin", "password": "Mix@pwd", "action": "login"}
Log
API
log.info(data)
运行脚本的日志。需要将日志等级调整为7,需要在配置文件中设置log::level为7,或者调用action:{“action”:”set_log_level”,”level”:7}
如果需要写入文件,需要在配置文件中设置log::file::enable为true
如果需要页面可视化,需要在apiproxy中进行转发
参数
名称 | 类型 | 描述 |
---|---|---|
data | any | 输出数据 |
用例
local log = require("log")
log.info("test",1) --日志输出test 1
Exmath
API
exmath.max(data)
exmath.min(data)
exmath.sum(data)
exmath.average(data)
exmath.var(data)
exmath.std(data)
exmath.max(data)
输入数据中的最大值
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.max(data)) --4.5
exmath.min(data)
输入数据中的最小值
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.min(data)) --1
exmath.sum(data)
所有输入数据的和
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.sum(data)) --10.5
exmath.average(data)
所有输入数据的平均值
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.average(data)) --2.625
exmath.var(data)
输入数据的总体标准偏差的方差
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.var(data)) --1.671875
exmath.std(data)
输入数据的总体标准偏差
参数
名称 | 类型 | 描述 |
---|---|---|
data | Table | 以列表形式输入的数据 |
返回值
Number
用例
local exmath = require("exmath")
data = {1,2,3,4.5}
print(exmath.std(data)) --1.2930100540985752
global_channel
支持单程序内部多个协程运行状态下的 Lua 脚本,使用全局 chan 进行交互的功能
包括:
global_channel.create(name,n)
global_channel.destroy(name)
global_channel.getllist()
global_channel.push(name,data)
global_channel.pop(name)
global_channel.create(name,n)
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | chan名称 |
n | int | chan长度 |
返回值
名称 | 类型 | 描述 |
---|---|---|
ok | bool | 创建成功或者失败 |
用例
local global_channel = require("global_channel")
ok = global_channel.create("test",10)
print(ok) --true。程序内部首次创建chan,成功
ok = global_channel.create("test",10)
print(ok) --false。已经创建过chan,失败
global_channel.destroy(name)
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | chan名称 |
返回值
名称 | 类型 | 描述 |
---|---|---|
ok | bool | 销毁成功或者失败 |
用例
local global_channel = require("global_channel")
ok = global_channel.create("test",10)
print(ok) --true。程序内部首次创建chan,成功
ok =global_channel.destroy("test")
print(ok) --true。销毁成功
ok =global_channel.destroy("test")
print(ok) --false。未存在名为test的chan,销毁失败
global_channel.getllist()
参数
返回值
名称 | 类型 | 描述 |
---|---|---|
list | table | 当前程序内部创建的通道情况 |
用例
local global_channel = require("global_channel")
local json = require("json")
print(json.encode(global_channel.getlist())) --{}。未有任何通道和数据
ok = global_channel.create("test",10)
print(ok) --true。创建成功
print(json.encode(global_channel.getlist())) --{"test":0}。有一个通道,且当前数据量为0
ok = global_channel.push("test",123456)
print(ok) --true。chan存在,写入成功
print(json.encode(global_channel.getlist())) --{"test":1}。有一个通道,且当前数据量为1
global_channel.push(name,data)
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | chan名称 |
data | any | 数据 |
返回值
名称 | 类型 | 描述 |
---|---|---|
ok | bool | 写入成功或者失败 |
用例
local global_channel = require("global_channel")
ok = global_channel.create("test",1)
print(ok) --true。程序内部首次创建,成功
ok = global_channel.push("test",123456)
print(ok) --true。chan存在,写入成功
ok = global_channel.push("test",789)
print(ok) --false。chan存在,超出长度,写入失败,丢弃数据
ok = global_channel.push("test1",123456)
print(ok) --false。chan不存在,写入失败,丢弃数据
global_channel.pop(name)
参数
名称 | 类型 | 描述 |
---|---|---|
name | string | chan名称 |
返回值
名称 | 类型 | 描述 |
---|---|---|
data | any | 数据 |
n | int | 当前剩余数据长度 |
ok | bool | 获取数据成功或者失败 |
用例
local global_channel = require("global_channel")
ok = global_channel.create("test",10)
print(ok) --true。程序内部首次创建,成功
ok = global_channel.push("test",123456)
print(ok) --true。chan存在,写入成功
data,n,ok = global_channel.pop("test")
print(data,n,ok) -- 123456,0,true。返回数据
data,n,ok = global_channel.pop("test")
print(data,n,ok) -- nil,0,false。没有数据,chan不存在或者当前chan没有数据
data,n,ok = global_channel.pop("test1")
print(data,n,ok) -- nil,0,false。没有数据,chan不存在或者当前chan没有数据
简单示例
第一个Lua脚本执行发送函数
local global_channel = require("global_channel") --引用全局chan
global_channel.create("test",1) --定义名称为test,长度为1的chan
global_channel.push("test",123456) -- 往名为test的chan发送数据:123456
第二个Lua脚本执行接收函数
local global_channel = require("global_channel") --引用全局chan
data,n,ok = global_channel.pop("test") --从名为test的chan中接收数据
print(data,n,ok) -- 123456,0,true。返回数据
global_channel.destroy("test") --销毁名为test的chan
注意事项
- 1.如果未使用 destroy 销毁 chan,可能会带来内存泄露问题。
- 2.chan 定义长度过大或者数据量过大,可能会带来的内存不足问题。