Kamailio伪变量$ var是否可以安全使用到单个消息处理程序的末尾?

问题描述 投票:0回答:1

我在Kamailio中使用伪变量$ var,因为根据文档,它们比$ dlg_var快,但我想知道这样使用它们是否安全:

jansson_get("a", $http_rb, "$var(a)");

$var(i) = 0;
jansson_array_size("elements", $http_rb, "$var(elements_size)");

while($var(i) < $var(elements_size)) {
    jansson_get("elements[$var(i)].key", $http_rb, "$var(key)");
    jansson_get("elements[$var(i)].value", $http_rb, "$var(value)");
    insert_hf("$var(key): $var(value)\r\n");
    $var(i) = $var(i) + 1;
}

if ($var(a) == "some value") {
    route(RELAY);
}

我试图通过配置文件中的一个进程来设置Kamailio,只是为了了解一个Kamailio进程如何处理消息。然后我同时打了两个电话,根据我的日志,似乎消息是同时处理的(我不确定一个Kamailio进程中是否有多个线程)。

所以,我的问题是:并发消息是否有可能覆盖$ var的值(因为它是同一Kamailio进程处理的所有消息的共享变量),并且存在使用$ var最小化或消除这种可能性?

我阅读了文档,并指出:

“注意:脚本变量会在初始化该脚本的Kamailio进程中持续存在,因此请确保在读取前为其提供新值,否则您将获得该值在该进程处理过的其他任何先前消息中分配的值Kamailio进程(pid)。“

此注释使我认为消息是按顺序处理的,或者至少我可以在处理单个消息时安全地使用$ var。我如何确定我给的价值在我仍在使用时不会改变?

concurrency sip kamailio
1个回答
0
投票

在新的消息循环开始时清除$ vars变量的值。

因此,对于单个消息,它是安全的。

Kamailio运行X线程(可在config中配置/在启动时配置),主循环将每个消息发送到其中一个线程。这样,处理可以并发并使用所有CPU。

© www.soinside.com 2019 - 2024. All rights reserved.