0

PHP+Mysqlでチャットアプリを開発しています。

私の考えは、ユーザーが新しいメッセージを受け取ったかどうかを確認するために、1分間ロードし続けるバックグラウンド(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() にあると思います。

DB への接続中に PHP がタイムアウトすることもあります。

致命的なエラー: 19 行目の C:\xampp\htdocs\chatly\config.php で最大実行時間が 30 秒を超えました

どうすれば2秒間一時停止できますか? それとも、ajax 経由で 2 秒ごとに新しいリクエストを送信するほうがよいと思いますか?

4

2 に答える 2

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); 
于 2013-08-03T20:32:46.657 に答える
0

その致命的なエラーを修正するini_set('max_execution_time', 60);には、タイムアウトを 1 分に設定します。

Sleep(2)関数はsleep(2)

于 2013-08-03T20:33:39.077 に答える