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:21:51 阅读更多 →
鸿蒙多功能工具箱开发实战(十五)-汇率换算与理财计算开发

鸿蒙多功能工具箱开发实战(十五)-汇率换算与理财计算开发

鸿蒙多功能工具箱开发实战(十五)-汇率换算与理财计算开发 前言 汇率换算和理财计算是财务工具的重要组成部分。本文将讲解汇率换算、理财收益计算、房贷车贷计算等功能实现。 一、汇率换算 1.1 汇率数据结构 export interface Currency {code: string // 货币代码name: s…

2026/7/23 23:20:51 阅读更多 →
Ubuntu虚拟化与KVM管理

Ubuntu虚拟化与KVM管理

Ubuntu虚拟化与KVM管理 一、虚拟化概述 1.1 什么是虚拟化 虚拟化是一种技术,允许在单个物理服务器上运行多个独立的虚拟环境(虚拟机)。每个虚拟机都有自己的操作系统、应用程序和资源分配。 虚拟化的优势: 资源利用率高:充分利用物理服务器资源 隔离性强:虚拟机之间相…

2026/7/23 23:20:51 阅读更多 →

最新新闻

电销团队每日拓客流程的系统化搭建方法:从名单获取到效果复盘

电销团队每日拓客流程的系统化搭建方法:从名单获取到效果复盘

直接切痛点:针对电销团队效率低下问题,提出四环节标准化流程框架一个高效的每日拓客流程可以拆成四个标准化环节:名单获取、名单分配、集中拨打、每日复盘。每个环节有明确的操作标准和责任人,减少团队在"找名单""…

2026/7/23 23:31:05 阅读更多 →
软件开发团队统一采购MacBook怎么选服务商

软件开发团队统一采购MacBook怎么选服务商

软件开发团队统一配置MacBook,选择服务商的核心标准不在于价格最低,而在于服务商能否提供从Apple Business Manager(ABM)注册、DEP自动注册、MDM统一管控到全生命周期资产管理的全流程交付能力。神州数码作为Apple中国大陆授权分销…

2026/7/23 23:31:05 阅读更多 →
【Springboot毕设全套源码+文档】基于springboot大学生勤工助学系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于springboot大学生勤工助学系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 23:31:05 阅读更多 →
Linux进阶篇04:GRUB2 深度配置与内核参数

Linux进阶篇04:GRUB2 深度配置与内核参数

实验环境:VirtualBox 虚拟机,Rocky Linux 9,Legacy BIOS (非 UEFI)。 前置知识:已完成Rocky 9 启动流程学习,理解 GRUB2 是启动流程的第二阶段。 核心目标:掌握 /etc/default/grub 配置文件的修改逻辑&…

2026/7/23 23:31:05 阅读更多 →
13 Windsurf vs Cursor vs Copilot:2026年AI IDE横评

13 Windsurf vs Cursor vs Copilot:2026年AI IDE横评

摘要:本文对比了 2026 年三大主流 AI 编程工具——Cursor、Windsurf 和 GitHub Copilot 的核心能力。通过三轮比拼(代码补全、内联编辑、项目级理解)和按场景推荐,文章指出:Copilot 在代码补全上仍是标杆;C…

2026/7/23 23:30:04 阅读更多 →
彻底搞懂OpenSSH!SSH原理+免密登录+安全加固+故障排查

彻底搞懂OpenSSH!SSH原理+免密登录+安全加固+故障排查

彻底搞懂OpenSSH!SSH原理免密登录安全加固故障排查(万字干货) 🔥 置顶:Linux运维必学核心干货,面试高频考点生产实战全覆盖,零基础也能看懂,收藏不亏! 前言&#xff1a…

2026/7/23 23:30:04 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

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

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

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

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/23 17:49:47 阅读更多 →

月新闻