sql >> データベース >  >> RDS >> Mysql

これは本当に長いポーリングですか?

    ポーリングは単純なものよりも少し難しいです。一般に、ブラウザに出力するすべてのものが完了すると解釈されるからです。あなたの例は非常に明確です:

    success:function(data) {
        var json = data;
        $("#commidwin").append(json['msg']);
        last_msg_id = json["last_msg_id_db"];
        setTimeout("load_msgs()", 1000);
    },
    

    jQueryは、応答が完了するまで待機してdataを構築します 変数を入力すると、成功コールバックが呼び出されます。

    ロングポーリングを作成する1つの方法は、タスクとフォロワーを持つことです:

    • タスクは「無限」ループであり、イベントをキャッチしてトリガーするだけで、「ボックス」に入れられます。

    • フォロワーはX秒ごとに行われるajax呼び出しであり、タスクで満たされた「ボックス」の内部を調べ、すぐにページ内で動作します。

    これはロングポーリングの例です。フォロワーはなく、ポーリングを停止するイベント(リリース)だけですが、アイデアは得られます:

    <?php
    
    // For this demo
    if (file_exists('poll.txt') == false)
    {
        file_put_contents('poll.txt', '');
    }
    
    // If this variable is set, a long-polling is starting...    
    if (isset($_GET['poll']))
    {
    
        // Don't forget to change the default time limit
        set_time_limit(120);
    
        date_default_timezone_set('Europe/Paris');
        $time = time();
    
        // We loop until you click on the "release" button...
        $poll = true;
        $number_of_tries = 1;
        while ($poll)
        {
            // Here we simulate a request (last mtime of file could be a creation/update_date field on a base)
            clearstatcache();
            $mtime = filemtime('poll.txt');
    
            if ($mtime > $time)
            {
                $result = htmlentities(file_get_contents('poll.txt'));
                $poll = false;
            }
    
            // Of course, else your polling will kill your resources!
            $number_of_tries++;
            sleep(1);
        }
    
        // Outputs result
        echo "Number of tries : {$number_of_tries}<br/>{$result}";
        die();
    }
    
    // Here we catch the release form
    if (isset($_GET['release']))
    {
        $data = '';
        if (isset($_GET['data']))
        {
            $data = $_GET['data'];
        }
        file_put_contents('poll.txt', $data);
        die();
    }
    ?>
    
    <!-- click this button to begin long-polling -->
    <input id="poll" type="button" value="Click me to start polling" />
    
    <br/><br/>
    
    Give me some text here :
    <br/>
    <input id="data" type="text" />
    <br/>
    
    <!-- click this button to release long-polling -->
    <input id="release" type="button" value="Click me to release polling" disabled="disabled" />
    
    <br/><br/>
    
    Result after releasing polling :
    <div id="result"></div>
    
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type="text/javascript">
    
        // Script to launch polling
        $('#poll').click(function() {
            $('#poll').attr('disabled', 'disabled');
            $('#release').removeAttr('disabled');
            $.ajax({
                url: 'poll.php',
                data: {
                    poll: 'yes' // sets our $_GET['poll']
                },
                success: function(data) {
                    $('#result').html(data);
                    $('#poll').removeAttr('disabled');
                    $('#release').attr('disabled', 'disabled');
                }
            });
        });
    
        // Script to release polling
        $('#release').click(function() {
            $.ajax({
                url: 'poll.php',
                data: {
                    release: 'yes', // sets our $_GET['release']
                    data: $('#data').val() // sets our $_GET['data']
                }
            });
        });
    
    </script>
    

    デモンストレーション:こちら




    1. オラクル-どのステートメントをコミットする必要がありますか?

    2. mysqlサーバーへの接続の問題:ERROR 2003(HY000)

    3. SQL Server(T-SQL)でクエリ結果を添付ファイルとして電子メールで送信する方法

    4. MySQLを使用してテーブルをINNODBバッファープールにプリロードする方法は?