Я использую псевдопеременные $ var в Kamailio, потому что, согласно документации, они быстрее, чем $ 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 при обработке одного сообщения. Как я могу быть уверен, что данное мной значение не изменится, пока я его еще использую?