2013-08-03 2 views
0

Я разрабатываю приложение чата в PHP + Mysql.Таймауты PHP при подключении к mysql

Моя идея заключалась в том, что я открываю скрипт в фоновом режиме (ajax), который будет продолжать загружаться в течение минуты, чтобы проверить, получил ли пользователь новое сообщение.

Здесь

$start = time(); 

    while(time() - $start < 60) 
    { 

    $result = mysql_query("SELECT * FROM messages WHERE `to` = '$me_user'"); 

     if(mysql_num_rows($result)) 
     { 
     $row = mysql_fetch_array($result); 
     $id = $row['id']; 
     $from = $row['from']; 
     $time = $row['time']; 
     $msg = $row['message']; 

     mysql_query("DELETE FROM messages WHERE id = $id"); 

     die("appendMsg('$msg',to,'$time');"); 
     } 
    $result = null; 
    Sleep(2); 
    } 

Так на самом деле он проверяет наличие новых сообщений каждые 2 секунды.

Но моя проблема в том, что весь сайт начинает «отставать» из-за этого. Я думаю, что проблема в Sleep().

Иногда даже время ожидания PHP при попытке подключения к БД.

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\chatly\config.php on line 19

Любое предложение, как я могу приостановить на 2 секунды? Или вы думаете, что лучше отправить новый запрос каждые 2 секунды через ajax?

+0

почему бы вам не попробовать сделать это с помощью AJAX? – Memolition

+0

, потому что я думал, что будет меньше ресурсов, если у меня будет загрузка скрипта в течение 60 секунд, которая будет проверять новое сообщение каждые 2 секунды. Вы думаете, что если бы ajax сделал запрос, каждый 2s был бы лучше? –

+0

Да, пользователь может использовать эту страницу без каких-либо задержек – Memolition

ответ

0

лет можно попробовать с помощью AJAX:

setInterval(function() { 
    if(window.XMLHttpRequest) { 
     ajax_request = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     ajax_request = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    ajax_request.open('POST', 'getChatMessages.php', true); 
    ajax_request.send(null); 

    ajax_request.onreadystatechange = function() { 
     if(ajax_request.readyState == 4) { 
      if(ajax_request.status == 200) { 
       document.getElementById('chat_content').innerHTML = ajax_request.response; 
      } 
     } 
    } 
}, 2000); 
+0

Я знаю, но я думаю, что слишком много запросов потребует слишком много ресурсов. Поэтому я подумал, что было бы лучше сделать запрос только один раз за минуту. –

+0

это то же самое, используя тот же php или используя другой файл, то, что вы избегаете с помощью ajax, - это лаг страницы. – Memolition

0

Чтобы исправить эту Фатальная ошибка, вы можете использовать ini_set('max_execution_time', 60);, чтобы установить тайм-аут на минуту.

Sleep(2) функция должна быть sleep(2)

+0

. Мое время max_execution установлено в 60 секунд. Другие части скрипта, которые должны моментально загружать тайм-аут –

+0

Тайм-аут PHP не установлен на 60 секунд. Только ваш тайм-аут цикла. PHP истечет весь сценарий до окончания цикла while, который вызывает Fatal Error. – TMKCodes

+0

Я установил его так, как set_time_limit (60); Я говорил о частях сайта, которые должны загружаться МГНОВЕННО, но они не из-за сна. Config.php должен немедленно подключиться к БД! –

Смежные вопросы