sql >> Database >  >> RDS >> Mysql

Is dit een echte lange peiling?

Polling is een beetje moeilijker dan een simpele tijd:gewoon omdat over het algemeen alle dingen die u naar de browser uitvoert, worden geïnterpreteerd als ze voltooid zijn. Je voorbeeld is heel duidelijk:

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

jQuery wacht totdat het antwoord is voltooid om uw data te bouwen variabele en zal uw succes terugbellen.

Een manier om lange peilingen te maken is door een taak en een volger te hebben:

  • de taak is de "oneindige" lus, het toont niets anders dan gebeurtenissen vangen en activeren, in een "doos" plaatsen.

  • de volger is een ajax-oproep die elke X seconden wordt gedaan, hij kijkt in de "box" die door de taak wordt gevuld en handelt onmiddellijk op de pagina.

Hier is een voorbeeld van een lange peiling, er is geen volger, alleen een gebeurtenis (release) die de peiling stopt, maar je krijgt een idee:

<?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>

Demonstratie:hier .




  1. Hoe te controleren of de mysql-database bestaat

  2. Hoe MySQL 8.0 te installeren op RHEL/CentOS 8/7 en Fedora 35

  3. Hoe som -of- 0 selecteren als er geen records bestaan?

  4. Hiërarchisch recursiemenu met PHP/MySQL