ASYNC 模块作者Daniel-Constantin Mierlamicondagmail.com编辑Daniel-Constantin Mierlamicondagmail.com版权所有 © 2011-2016 asipto.com目录管理员指南概述依赖项Kamailio 内置模块外部库与应用配置参数workers整数ms_timer整数return整数mode整数可用函数async_route(routename, seconds)async_ms_route(routename, milliseconds)async_sleep(seconds)async_ms_sleep(milliseconds)async_task_route(routename)async_task_group_route(routename, groupname)async_task_data(routename, data)async_task_group_data(routename, groupname, data)async_tkv_emit(type, key, value)示例列表1.1 配置 workers 参数1.2 配置 ms_timer 参数1.3 配置 return 参数1.4 配置 mode 参数1.5 async_route 使用示例1.6 async_ms_route 使用示例1.7 async_sleep 使用示例1.8 async_ms_sleep 使用示例1.9 async_workers 核心参数示例1.10 async_task_route 使用示例1.11 async_task_group_route 使用示例1.12 async_task_data 使用示例1.13 async_task_group_data 使用示例1.14 async_tkv_emit 使用示例第 1 章 管理员指南1. 概述本模块为配置脚本中的 SIP 请求处理提供异步操作能力。异步功能底层依赖 TM 与 TMX 模块提供的t_suspend()和t_continue()函数实现。注意触发异步操作后后续的报文处理会在另一个应用进程中恢复执行。因此不建议使用私有内存变量若需要在处理恢复后读取数据请使用共享内存变量例如$avp(...)、$xavp(...)、$shv(...)、htable 模块的$sht(...)。2. 依赖项2.1 Kamailio 内置模块加载本模块前必须先加载以下模块tm事务管理模块tmx事务管理扩展模块2.2 外部库与应用无额外外部依赖。3. 配置参数3.1workers整数用于处理async_route()和async_sleep()异步任务的工作进程数量。默认值1示例 1.1 配置 workers 参数... modparam(async, workers, 2) ...3.2ms_timer整数为async_ms_sleep()和async_ms_route()函数启用毫秒级定时器参数值为定时器的分辨率单位毫秒。分辨率数值越小系统负载越高。设置为 1 代表 1 毫秒精度设置为 20 代表 20 毫秒精度。默认值0不启用毫秒级定时器示例 1.2 配置 ms_timer 参数... modparam(async, ms_timer, 10) ...3.3return整数异步函数执行成功时的返回值。该参数仅对会挂起 SIP 事务的异步函数生效对异步数据类函数无效。默认值0示例 1.3 配置 return 参数... modparam(async, return, 1) ...3.4mode整数控制本模块是否绑定 TM 模块0表示绑定1表示不绑定。如果仅使用async_tkv_emit()这类功能无需依赖 TM 模块函数可设置为 1。默认值0绑定 TM 模块示例 1.4 配置 mode 参数... modparam(async, mode, 1) ...4. 可用函数4.1async_route(routename, seconds)将当前 SIP 请求挂起指定秒数后转入route[routename]路由块继续处理。内部发生错误时函数返回 false执行成功时函数会直接终止当前脚本的执行等同于返回 0 的行为。参数说明routename目标路由块名称支持静态字符串或带配置变量的动态字符串seconds请求挂起的秒数最大值为 100支持静态整数或存储整数的变量。由于请求恢复后运行在新的进程中原配置脚本的执行状态会丢失恢复执行后跑完指定的路由块就会结束处理不会回到原调用位置。可在REQUEST_ROUTE中使用。示例 1.5 async_route 使用示例... request_route { ... async_route(RESUME, 4); ... } route[RESUME] { send_reply(404, Not found); exit; } ...4.2async_ms_route(routename, milliseconds)功能与async_route()一致时间单位为毫秒。仅当ms_timer参数大于 0 时生效。内部发生错误时函数返回 false执行成功时终止当前脚本执行。参数说明routename目标路由块名称支持静态或动态字符串milliseconds请求挂起的毫秒数最大值为 30000即 30 秒支持静态整数或变量。请求恢复后执行状态同样会丢失目标路由执行完毕即结束。可在REQUEST_ROUTE中使用。示例 1.6 async_ms_route 使用示例... request_route { ... async_ms_route(RESUME, 250); ... } route[RESUME] { send_reply(404, Not found); exit; } ...4.3async_sleep(seconds)将当前 SIP 请求挂起指定秒数之后继续执行当前路由块的后续逻辑。注意恢复后会一直执行到当前路由块末尾。如果需要更精准地控制等待后的执行逻辑建议使用async_route()。由于执行会在新进程中恢复异步等待前后不要使用私有内存变量。参数说明seconds请求挂起的秒数最大值为 100支持静态整数或变量。内部发生错误时函数返回 false。可在REQUEST_ROUTE中使用。示例 1.7 async_sleep 使用示例... async_sleep(4); send_reply(404, Not found); exit; ...4.4async_ms_sleep(milliseconds)功能与async_sleep()一致时间单位为毫秒。仅当ms_timer参数大于 0 时生效。参数说明milliseconds请求挂起的毫秒数最大值为 30000即 30 秒支持静态整数或变量。可在REQUEST_ROUTE中使用。示例 1.8 async_ms_sleep 使用示例... route[REQUESTSHAPER] { $var(res) http_connect(leakybucket, /add?key$fd, $null, $null,$avp(delay)); $var(d) $(avp(delay){s.int}); if ($var(d) 0) { # 将请求延迟 $avp(delay) 毫秒 async_ms_sleep($var(d)); if (!t_relay()) { sl_reply_error(); } exit; } # 无延迟直接转发 if (!t_relay()) { sl_reply_error(); } exit; } ...4.5async_task_route(routename)将 SIP 请求交给核心异步框架第一组中的空闲工作进程在指定路由块中继续处理。使用该功能需要先配置核心参数async_workers以启用异步框架任务无需等待固定时长异步工作进程空闲时就会立即执行。内部发生错误时函数返回 false执行成功时终止当前脚本执行。参数说明routename目标路由块名称支持静态或动态字符串。请求恢复后原执行状态丢失目标路由执行完毕即结束。可在REQUEST_ROUTE中使用。示例 1.9 async_workers 核心参数示例... # 启用 8 个工作进程供 async 及其他模块使用 async_workers8 ...示例 1.10 async_task_route 使用示例... request_route { ... async_task_route(RESUME); ... } route[RESUME] { t_relay(); exit; } ...4.6async_task_group_route(routename, groupname)功能与async_task_route()一致额外支持指定异步工作进程组的名称。更多细节可参考核心全局参数async_workers_group。可在REQUEST_ROUTE中使用。示例 1.11 async_task_group_route 使用示例... async_workers_groupnameabc;workers4;nonblock0;usleep0 ... request_route { ... async_task_route(RESUME, abc); ... } route[RESUME] { t_relay(); exit; } ...4.7async_task_data(routename, data)向第一组异步任务进程发送数据进程会执行指定路由块并可通过$async(data)读取传入的数据。该函数不会挂起当前 SIP 报文异步任务进程中也无法访问原始 SIP 报文仅使用本地构造的虚拟 SIP 请求。参数支持嵌入变量。返回值成功返回正值true失败返回负值false。可在任意路由块ANY_ROUTE中使用。示例 1.12 async_task_data 使用示例... async_workers_groupnameabc;workers4;nonblock0;usleep0 ... request_route { ... async_task_data(RESUME, caller: $fU - callee: $tU); ... } route[RESUME] { xinfo($async(data)\n); exit; } ...4.8async_task_group_data(routename, groupname, data)功能与async_task_data()一致额外支持指定异步工作进程组的名称。更多细节可参考核心全局参数async_workers_group。返回值成功返回正值true失败返回负值false。可在任意路由块ANY_ROUTE中使用。示例 1.13 async_task_group_data 使用示例... async_workers_groupnameabc;workers4;nonblock0;usleep0 ... request_route { ... async_task_group_data(RESUME, abc, caller: $fU - callee: $tU); ... } route[RESUME] { xinfo($async(data)\n); exit; } ...4.9async_tkv_emit(type, key, value)触发一个「类型-键-值TKV」事件。可在任意路由块ANY_ROUTE中使用。示例 1.14 async_tkv_emit 使用示例... async_workers_groupnametkv;workers1;nonblock0;usleep0 ... request_route { ... async_tkv_emit(8000, call, caller$fU;callee$tU); ... } event_route[core:tkv] { xinfo($atkv(type) / $atkv(key) / $atkv(val)\n); exit; } ...
企业数字化 ERP 产品动态
相关推荐
鸿蒙 ArkTS 实战:随身行李称重的限重解析、物品清单、启用状态与剩余重量 鸿蒙 ArkTS 实战:随身行李称重的限重解析、物品清单、启用状态与剩余重量
前言
随身行李称重是一个基于 ArkTS 和 ArkUI 声明式 UI 的鸿蒙单页项目,入口文件位于 entry/src/main/ets/pages/Index.ets。 本文围绕 随身行李重量管理 场景,拆解… · 2026/9/18 12:09:16
Ubuntu开发环境搭建(Python-Go-Rust) Ubuntu开发环境搭建(Python/Go/Rust)
一、开发环境概述
1.1 为什么需要搭建开发环境
一个良好的开发环境是高效编程的基础,它应该具备以下特点: 统一的工具链:所有开发人员使用相同版本的工具 快速部署:能够快速搭建和复制开发环境 隔离性:不同项目之间互不干扰 可扩… · 2026/9/17 4:19:33
Spingboot启动预热的实现 启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/29 6:52:37
学Java别走弯路,这5个方向最吃香 学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/29 4:13:53
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/29 0:45:26
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/29 13:54:52
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/29 8:55:58