Kamailio async模块
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; } ...

相关新闻

拆解高通SA8797舱驾一体开发板:4颗MAX96724、10颗PMIC、LPDDR5X,下一代智能汽车中央计算平台到底有多复杂?

拆解高通SA8797舱驾一体开发板:4颗MAX96724、10颗PMIC、LPDDR5X,下一代智能汽车中央计算平台到底有多复杂?

《拆解高通SA8797舱驾一体开发板:4颗MAX96724、10颗PMIC、LPDDR5X,下一代智能汽车中央计算平台到底有多复杂?》 摘要: 随着汽车电子架构从传统分布式ECU向域控制器、中央计算平台演进,舱驾一体已经成为下一阶段智能汽车的重要方向。 传统汽车通常采用: 座舱域控制器;…

2026/7/23 23:22:00阅读更多 →
中际旭创港股折价发行,550亿募资、全明星基石阵容或创年内港股最大IPO纪录!

中际旭创港股折价发行,550亿募资、全明星基石阵容或创年内港股最大IPO纪录!

中际旭创港股折价发行,吸金能力强劲中际旭创港股折价发行,已显现出极强的吸金能力,不仅吸引了淡马锡、阿里、腾讯等多方资金齐聚这家 "光模块龙头",还很有可能创下年内港股最大 IPO 纪录。何时招股、定价与上市&#xf…

2026/7/23 23:19:59阅读更多 →
出口摩洛哥注意!当地货款诉讼时效规定,非诉追债方式有哪些

出口摩洛哥注意!当地货款诉讼时效规定,非诉追债方式有哪些

外贸企业出口摩洛哥经常遇到客户拖欠货款,不少出口商对当地诉讼时效一知半解,拖着拖着就错过了最佳回款时机。摩洛哥商事诉讼流程长、律师费用高,很多中小外贸企业一打听成本就打了退堂鼓。其实除了打官司,还有成本更低的本土化非…

2026/7/23 23:19:59阅读更多 →
AI 电动抹布清洁机智能功率 MOSFET 完整选型方案

AI 电动抹布清洁机智能功率 MOSFET 完整选型方案

随着 AI 技术赋能智能家居清洁设备(如自动路径规划、污渍识别、水量精准控制),清洁机对功率 MOSFET 提出了新要求:高效率、低发热、高集成度及低电压驱动。微碧半导体(VBsemi)基于先进的 SGT 与 Trench 工艺…

2026/7/24 0:40:12阅读更多 →
[特殊字符]《淘宝TOP增值API聚石塔外禁调:CRM/数据罗盘为什么要签增值协议?》(附Python源码)

[特殊字符]《淘宝TOP增值API聚石塔外禁调:CRM/数据罗盘为什么要签增值协议?》(附Python源码)

🔐《淘宝TOP增值API聚石塔外禁调:CRM/数据罗盘为什么要签增值协议?》(附Python源码)结论先行:淘宝TOP的增值API(CRM会员RFM、数据罗盘、竞品洞察、营销UM包等)在聚石塔外调用会被直接…

2026/7/24 0:40:12阅读更多 →
基于Java的校园物品交易平台(Java+SSM+MySQL)| 计算机毕业设计 附源码论文PPT

基于Java的校园物品交易平台(Java+SSM+MySQL)| 计算机毕业设计 附源码论文PPT

本项目为计算机本科毕业设计,采用 SSM(Spring SpringMVC MyBatis) 作为后端框架,HTMLCSSJavaScript 网页端作为前端,数据库使用 MySQL。系统涵盖用户注册登录、商品发布浏览、商品留言、商品收藏、商品订单、论坛交流…

2026/7/24 0:40:12阅读更多 →
计算机毕业设计选题推荐:2026年5个校园场景项目(SSM/SpringBoot+小程序+论文+源码)

计算机毕业设计选题推荐:2026年5个校园场景项目(SSM/SpringBoot+小程序+论文+源码)

大三/大四,不知道毕设做什么?我整理了5个校园场景方向的毕业设计项目,每个都配 完整论文 答辩PPT 源码,技术栈覆盖 SSM、SpringBoot、Vue 和微信小程序。1. 学生请假管理系统 技术栈:SSM HTML MySQL难度&#xff1…

2026/7/24 0:40:12阅读更多 →
Mybatis15-Mapper接口的代理+MappedStatement

Mybatis15-Mapper接口的代理+MappedStatement

一、Mapper接口的代理对象的意义第一步:没有Mapper接口时,我们怎么写代码?在MyBatis早期(或者说如果你不用Mapper接口),你的代码长这样:// 1. 拿到SqlSession SqlSession session sqlSessionFa…

2026/7/24 0:38:12阅读更多 →
想找靠谱的中国谷歌SEO公司?大鱼营销用真实数据帮你提升海外排名。

想找靠谱的中国谷歌SEO公司?大鱼营销用真实数据帮你提升海外排名。

在全球化数字营销的浪潮中,许多中国外贸企业都面临同一个难题:如何找到一家真正靠谱、能带来真实效果的谷歌SEO公司?市场上有太多的服务商,但往往缺乏透明度、数据支撑,或者优化手法落后,导致企业投入了大量…

2026/7/24 0:38:12阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →