Acabo de encontrar esta publicación, es antigua, pero el concepto de encuesta da problemas a mucha gente. Así que pondré un ejemplo de implementación aquí. Pero antes de dárselos, debería darle un consejo que me hizo enojar hace tiempo:
Cuando realice una encuesta, debe encargarse del comportamiento de las sesiones (race conditions). Para simplificar: si abre una sesión, el archivo de sesión se bloquea hasta que la sesión se cierre para evitar que 2 personas escriban datos diferentes en ella. Por lo tanto, si necesita una sesión para verificar si un usuario está conectado o no, siempre cierre la sesión antes del sondeo.
Mi demostración le da un ejemplo de una implementación de sondeo en PHP. No usaré una base de datos, sino un archivo. Cuando haga clic en el botón de sondeo, ingresará el ciclo y hasta que se modifique el archivo, se mantendrá el sondeo. Cuando rellene el formulario y haga clic en Liberar, lo que escribió se guardará en el archivo. El tiempo de modificación del archivo cambiará, por lo que el sondeo se detendrá.
Consejo: use una herramienta como Firebug para ver qué pasa.
Ahora vamos a hablar en una mejor langage que mi Inglés:
<?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>
se puede probar here
se esta técnica rquired tener Tomcat en tercera cometa en .etc biblioteca? o se puede servir en un servlet típico? ¿Hay alguna aplicación de demostración/trabajo a la que podamos hacer referencia? – cometta
puede mostrarnos un ejemplo de comet.aspx? – cometta
Esta técnica no requiere nada más allá de IIS6 y .NET para comenzar a funcionar. –