Почему мой длинный код опроса для системы уведомлений не обновляется в режиме реального времени? PHP MYSQL - PullRequest
0 голосов
/ 20 марта 2012

Я делаю систему уведомлений, похожую на красное уведомление на Facebook. Он должен обновлять количество сообщений, отправленных пользователю в режиме реального времени. Когда сообщение MYSQL таблица обновляется, оно должно немедленно уведомить пользователя, но это не так. Кажется, не возникает ошибки при вставке в MYSQL, потому что при обновлении страницы обновление уведомлений происходит очень хорошо.

Я, по сути, использую код из этого видеоурока: http://www.screenr.com/SNH (который обновляется в режиме реального времени, если файл data.txt изменяется, но не для MYSQL, как я пытаюсь это сделать)

Что-то не так с кодом ниже:

**Javascript**

<script type="text/javascript">
$(document).ready(function(){   

var timestamp = null;
function waitForMsg(){
$.ajax({
    type: "GET",
    url: "getData.php",
    data: "userid=" + userid,
    async: true,
    cache: false,
    success: function(data){
        var json = eval('(' + data + ')');
        if (json['msg'] != "") {

            $('.notification').fadeIn().html(json['msg']);
        }

        setTimeout('waitForMsg()',30000);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
        setTimeout('waitForMsg()',30000);
    }
});
}

waitForMsg();
</script>
<body>
<div class="notification"></div>


**PHP***

<?php

if ($_SERVER['REQUEST_METHOD'] == 'GET' )
{

$userid = $_GET['userid'];
include("config.php");

$sql="SELECT MAX(time) FROM notification WHERE userid='$userid'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$currentmodif = $row['MAX(time)'];

$s="SELECT MAX(lasttimeread) FROM notificationsRead WHERE submittedby='$userid'";
$r = mysql_query($s);
$rows = mysql_fetch_assoc($r);
$lasttimeread = $rows['MAX(lasttimeread)'];


while ($currentmodif <= $lasttimeread) {
usleep(10000);
clearstatcache();
$currentmodif = $row['MAX(time)'];
}

$response = array();    

$response['msg']       = You have new messages;
echo json_encode($response);

}
?>

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Вы не выполняете повторно оператор SQL в цикле, поэтому значение в $ row ['MAX (time)'] "никогда не изменится.

Если вы повторно выполнитезапрос в цикле, этот пример может работать, но выполнение запроса каждые 10 мсек не будет очень эффективным способом реализации уведомления в режиме реального времени.

Кроме того, если скрипт PHP работает дольше, чем настроенное времяв php.ini (max_execution_time, 30 секунд по умолчанию) вы получите ошибку.

0 голосов
/ 20 марта 2012

есть проблема с вашей строкой JavaScript ниже

  url: "getData.php",
    data: "userid" + userid,
    async: true,

удалите знак = и попробуйте снова.

Я не прочитал весь код, но обнаружил, что это является причиной теста, и не стесняйтесь отвечать, если все еще есть проблемы.

...