сбой сервера при использовании onreadystatechange - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь создать чат для своего веб-сайта.

Чтобы загрузить новые данные, я запускаю функцию каждые 1,5 ''.

Если я использую асинхронный режим, мой веб-сайтбыстро, мой сервер не падает, но браузер зависает до ответа.

Когда я использую синхронный режим, мой сервер через некоторое время падает, и мне нужно перезапустить Apache (!?).

Я думал, что запрашиваю слишком много данных, и мой (виртуальный) сервер падает, но почему в асинхронном режиме работает нормально?

function loadchat() {
    xmllive.open('GET','live.php', false);
    xmllive.send(null);
    myelemen('dcdd').innerHTML = xmllive.responseText;
}

function loadchatv() {
    xmllive.onreadystatechange=function() {
        if (xmllive.readyState==4 && xmllive.status==200){
        myelemen('dcdd').innerHTML = xmllive.responseText;
    }
}

xmllive.open('GET','live.php', true);
xmllive.send();

Спасибо за ваш ответ, МММ.С вашего ответа я прочитал о ваших предложениях.(http://dsheiko.com/weblog/websockets-vs-sse-vs-long-polling).

Я понял, что в Long Pooling сервер делает цикл, пока не находит новые данные, и только тогда браузер получает и отправляет новый запрос.

Итак, скажите, пожалуйста, что вы думаетеоб этом решении (упрощенно):

/////////// html file //////////////

<script type="text/javascript" charset="utf-8">

var xmlff;
if (window.XMLHttpRequest) {
    xmlff=new XMLHttpRequest();
} else {
    xmlff=new ActiveXObject("Microsoft.XMLHTTP");
}

   function waitForMsg(){
    xmlff.onreadystatechange=function() {
        if (xmlff.readyState==4 && xmlff.status==200){
            document.getElementById('messages').innerHTML = xmlff.responseText ;
             setTimeout('waitForMsg()', 1000 );
        }
    }
    xmlff.open('GET','msgsrv.php' ,true);
    xmlff.send();
}

</script>
</head>
<body>
    <div id="messages">
    </div>

<script type=text/javascript>
waitForMsg()
</script>
</body>
</html>

/////// php file ///////////

<?

do {
    sleep(3);
    $result = mysql_query("SELECT message FROM chat ");
    while ($row = mysql_fetch_array($result)){
        $msg .= $row[0];
    }

} while (mysql_num_rows($result) == 0);


    header("HTTP/1.0 200");
    print $msg;

?>

Заранее спасибо.

...