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

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

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

2026/10/20 4:18:03 阅读更多 →
Ubuntu虚拟化与KVM管理

Ubuntu虚拟化与KVM管理

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

2026/10/17 13:52:04 阅读更多 →

最新新闻

大模型推理优化与部署实战:从KV Cache、量化到服务压测

大模型推理优化与部署实战:从KV Cache、量化到服务压测

大语言模型能写诗、能写代码,可是一旦真实跑到线上去服务用户,推理优化与部署才是真正决定系统能不能撑住的那道关卡。很多团队花大力气训好了模型,结果一上线就暴露各种问题:单请求时延太高、并发上来直接OOM、一个长对话把显存吃…

2026/10/21 4:52:56 阅读更多 →
Redis热Key从发现到治理:大厂高并发缓存优化实践

Redis热Key从发现到治理:大厂高并发缓存优化实践

Redis热Key这个事,干后端的人早晚都会碰上。我印象特别深的一次,是某次大促压测,一个商品维度的Key QPS直接冲到了几十万,Redis实例的CPU先扛不住了,整个链路的响应时间从2毫秒一路飙到几百毫秒,紧接着就是…

2026/10/21 4:52:56 阅读更多 →
Yeastar PSTN网关与FreePBX对接实战:SIP中继配置避坑指南

Yeastar PSTN网关与FreePBX对接实战:SIP中继配置避坑指南

1. 从一通打不通的外线电话说起如果你正在看这篇内容,大概率你手里正握着一台Yeastar的PSTN网关,或者正准备把它和FreePBX对接起来。我先说结论:这套组合能跑通,而且跑通之后非常稳定,但中间有几个坑,几乎每…

2026/10/21 4:52:56 阅读更多 →
知识工作插件实战:从采集到温习的全流程效率工具

知识工作插件实战:从采集到温习的全流程效率工具

先聊聊我为什么会对“knowledge-work-plugins”这个东西上瘾。这几年我一直在一线做知识型项目,每天的工作基本就是读资料、写笔记、做分析、出方案,坏消息是中间的衔接环节特别散。今天在文档里看到一句话很关键,明天可能就忘在哪个聊天记录…

2026/10/21 4:52:56 阅读更多 →
为什么1.58比特就够了?揭秘parakeet-redux三值量化的核心原理

为什么1.58比特就够了?揭秘parakeet-redux三值量化的核心原理

人工智能语音模型量化模型压缩 【免费下载链接】parakeet-redux 项目地址: https://ai.gitcode.com/hf_mirrors/moondream/parakeet-redux 点击查看 免费下载 parakeet-redux 是一个 1.58 比特三值量化(ternary quantization)的自动语音识别…

2026/10/21 4:52:56 阅读更多 →
论文数据炼金术:AI辅助从提取到清洗的全流程实战

论文数据炼金术:AI辅助从提取到清洗的全流程实战

写在前面:这篇东西不是软件广告,也不打算把某个工具吹成神话。它就来自我自己平时处理论文数据的一堆真实经历:从抓取文献里的零散数据,到清洗成一张能看能算的表,再到最后写出方法学和图表描述,中间踩过的…

2026/10/21 4:51:55 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →