Я написал некоторый код PHP, чтобы помочь мне подключиться к REST API для телефонной системы (т.е. ICWS.php.)
Затем, чтобы облегчить мне жизнь, я написал небольшой скрипт (т.е. interations.php), который принимает два параметра: метод и идентификатор. Этот скрипт будет вызывать публичный метод в моем коннекторе PHP.
Кроме того, у меня есть другой скрипт (т.е. poll.php). Этот скрипт будет пинговать API каждые полсекунды, чтобы узнать, доступно ли новое сообщение. Я использую опрос на стороне сервера, чтобы справиться с этим. Код ниже покажет, как poll.php
while(1){
//process Messages
$icws->processMessages();
//show the Calls Queue
$result = $icws->getCallsQueue();
//$current = $icws->getCurrentUserStatusQueue();
echo 'event: getMessagingQueue' . "\n";
echo 'data: ' . json_encode( array('calls' => $result));
echo "\n\n"; //required
ob_flush();
flush();
putToSleep($sleepTime);
}
function putToSleep($val = 1){
if( is_int($val) ){
sleep($val);
} else {
usleep($val * 1000000);
}
}
Со своего сайта (например, phonesystem.html) я запускаю опрос на стороне сервера, «который проверяет API один раз каждые 1/2 секунды». С этой же страницы я также могу совершать другие прямые звонки (например, набрать 7204536695); все запросы выполняются через Ajax.
Вот мой код, который генерирует опрос на стороне сервера
//Server Side Message Polling
function startPolling(){
var evtSource = new EventSource("poll.php");
evtSource.addEventListener("getMessagingQueue", function(e) {
var obj = JSON.parse(e.data);
if(!obj.calls || obj.calls.length === 0){
console.log('no messages');
phoneKeyPad(false);
return;
}
processMessages(obj.calls);
}, false);
}
$(function(){
startPolling();
});
Проблема, с которой я сталкиваюсь, заключается в том, что при вызове ajax ответ занимает слишком много времени (+1 минута).
Кажется, что сервер Apache замедляется, поскольку использование другого приложения становится немного медленнее.
Что я могу проверить и как я могу решить эту проблему?
Задача ещё не решена.
Других решений пока нет …