Ben sadece bu yazı bulundu, o eski, ama yoklama kavram kişilere bir sürü sıkıntılar verir. Yani burada bir uygulama örneği koyacağım. Ama sana vermeden önce, size bir süre önce beni deli yapılan bir tavsiye vermek gerekir:
Yoklamak zaman, oturumları davranış ilgilenir (race conditions). Olmalıdır Basit yapmak için: Eğer bir oturum açarsanız oturum içine farklı veri yazma 2 theads önlemek için kapalı kadar, oturum dosyası kilitli. Bir kullanıcı ya da öylesine açtıysa kontrol etmek için bir oturumu gerekirse Yani, her zaman yoklama önce oturumu kapatın.
Benim demo PHP bir yoklama uygulamaya bir örnek verir. Ben bir dosya yerine bir veritabanı kullanmak, ama olmaz. Eğer yoklama butonuna tıkladığınızda, döngü girecek ve dosya değiştirilene kadar, sen yoklama kalacak. Eğer formu doldurunuz ve Release tıkladığınızda, ne yazdığınız dosya içine kaydedilecektir. Dosyanın değiştirme zamanı yoklama durdurmak böylece değişecek.
İpucu: Firebug adlı ne görmek gibi bir araç kullanın.
Şimdi benim ingilizce daha iyi langage konuşmak sağlar:
<?php
// For this demo
if (file_exists('poll.txt') == false) {
file_put_contents('poll.txt', '');
}
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>
You can try it here