выбор транка
изменение последовательность выбора транков
Сообщений: 147
|
Re: выбор транка
Упс пардон )
[globals]
OPER=0
MAX_VALUE=30
[main]
exten=> _X.,1,Set(START_IN=${OPER})
exten=> _X.,n(start),Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${OPER} >= ${MAX_VALUE}?:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1)
exten=> _X.,n(not_max),GotoIf($[${START_IN} == ${OPER}]?over)
exten=> _X.,n,Dial(SIP/oper_${OPER}/${EXTEN},60)
exten=> _X.,n,GotoIF($[${DIALSTATUS} == CHANUNAVAIL]?start)
exten=> _X.,n(over),Hangup()
Так нормально ?
|
Сообщений: 1573
|
Re: выбор транка
Чуть поспешил я с предыдущими выводами ... ))
Не рабочий ваш вариант ...!
|
Сообщений: 147
|
Re: выбор транка
Уже когда домой ехал понял что налажал ). Задача оказалась сложнее и интереснее ..
[globals]
OPER=1
MAX_VALUE=30
[main]
exten=> _X.,1,Set(COUNT=0)
exten=> _X.,n(start),Set(COUNT=$[${COUNT} + 1])
exten=> _X.,n,GotoIF($[${OPER} > ${MAX_VALUE}?:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1)
exten=> _X.,n(not_max),Dial(SIP/oper_${OPER}/${EXTEN},60,g)
exten=> _X.,n,Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${COUNT} == ${MAX_VALUE}?over])
exten=> _X.,n,GotoIF($[${DIALSTATUS} == CHANUNAVAIL]?start)
exten=> _X.,n(over),Hangup()
Но есть одно но в данном варианте ... за четкое распределение звонков между операторами, при отказе одного из них и при малом количестве операторов (2-3), отказоустойчивость может не сработать. Как вариант - делать перебор в 2 раза больше чем операторов.
|
Сообщений: 1573
|
Re: выбор транка
Не-а! Опять - не рабочий ... ))
|
Сообщений: 147
|
Re: выбор транка
[globals]
OPER=0
MAX_VALUE=30
[main]
exten=> _X.,1,Set(COUNT=0)
exten=> _X.,n(start),Set(COUNT=$[${COUNT} + 1])
exten=> _X.,n,Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${OPER} > ${MAX_VALUE}?:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1)
exten=> _X.,n(not_max),Dial(SIP/oper_${OPER}/${EXTEN},60)
exten=> _X.,n,GotoIF($[${COUNT} == ${MAX_VALUE}?over])
exten=> _X.,n,GotoIF($[${DIALSTATUS} == CHANUNAVAIL]?start)
exten=> _X.,n(over),Hangup()
|
Сообщений: 1573
|
Re: выбор транка
iye, скажите, как вы думаете, может ли OPER выйти за границы 30?
В высоко-нагруженную систему ежесекундно приходит 6-10 вызовов ... )
|
Сообщений: 147
|
Re: выбор транка
Может .. но нас это не волнует .. т.к стоит условие, если больше 30 сбрасываем до 1. У нас ведь не может быть условия что некоторые вызовы обрабатываются быстрее других при прохождении диалплана ? )
|
Сообщений: 1573
|
Re: выбор транка
Представьте себе ситуацию, когда один вызов проверил OPER и переходит непосредственно к вызову, а другой поступающий в этот момент увеличивает эту переменную, например до 31 (и пока она опять не сброшена, какие то из новых поступающих примут уже 31, которую впоследствии тоже могут увеличить) ....
|
Сообщений: 147
|
Re: выбор транка
Очень маловероятно ... настолько что можно пренебречь ..(увеличение переменной опер должно будет произойти в интервале когда мы уже проверили ее на максимум и до начала диала .. это наверно даже не миллисекунды ... а вы о 10 вызовах в секунду ...) и даже если такая ситуация произойдет то что мы получим в диалстусе ? Тот же ченел анэвэйлэбл .. в результате у нас пройдет лишняя итерация цикла. Я не прав ?
|
Сообщений: 1573
|
Re: выбор транка
iye: Очень маловероятно ...
Так и будет ... ) (плюс, к новым вызовам, идет перезапись по диалстатусу ...)
Ошибка в том, что все вызовы работают с одной, глобальной, переменной. (вместо того, что бы получить из нее значение). А если устранить этот недостаток, то нужно будет отдельно следить, что бы она не вышла за свои пределы. И все равно - не будет гарантии.
Ответ - что ничего страшного, всего лишь лишний шаг (по диалстатусу) - не приемлем ...
При малом количестве транков, и большом кол. входящих (10 - это я поскромничал), допускаю ситуацию, когда вызов вообще не состоится ...
Вначале я не увидел этого до конца и подумал, что может быть имеет право на существование такой вариант (просто в нем больше упорядоченности - как виделось). Теперь вижу однозначно - нет!
Где нибудь на не нагруженной системе - он будет работать. Но в корне - он не правильный ...
|
|