Как сервер возвращает данные без запроса клиента при длительном опросе?

jquery ajax real-time comet long-polling

427 просмотра

1 ответ

Я реализовал очень простой и ленивый метод запроса данных с сервера через ajax с интервалом для воздействия в реальном времени.

Но я хочу выбрать длинную технику опроса / кометы, так как они поощряют сервер выдвигать данные, когда есть один, вместо того, чтобы клиент тянул постоянно, даже когда его нет.

Я полностью понимаю, как долго работают опросы и кометы. Но я хотел бы увидеть часть кода, где сервер проталкивает, когда есть данные для клиента.

Как может запрос, сделанный клиентом давно (длительный опрос), может выдвинуть сервер, когда есть данные? Я не понимаю эту часть. Может кто-нибудь показать в кодировании, пожалуйста?

В настоящее время я проверяю через AJAX для новых данных в интервале. Теперь, как это можно изменить, чтобы реализовать длительный опрос, при котором сервер автоматически возвращается, когда есть данные без запроса клиента?

(function notify(){
    $.each(id, function(k, v){
      jQuery.ajax({

           method: "POST",
           url: "/notification.php",
           "data": v,
           error: function() {
             reject('error');
           },  
           success: function(result) {
             console.log(result.data);         
           }
       });
    })
setTimeout(function(){
    notify();
 }, 1000);
})()

Поскольку этот вопрос помечен как дубликат:

Я сказал, что полностью понимаю концепцию длинного опроса и кометы. Я здесь не для того, чтобы понять концепцию, а для кода, который фактически реализует эту концепцию!

Автор: 112233 Источник Размещён: 08.11.2019 10:58

Ответы (1)


0 плюса

Наконец я нашел ответ здесь:

http://www.zeitoun.net/articles/comet_and_php/start

Я выбрал второй пример, приведенный на сайте: комета с классическим ajax. Он работает как шарм. Ниже приведен код для index.html (клиентской страницы) в jquery, также взятый с сайта.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Comet demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--     <script type="text/javascript" src="prototype.js"></script> -->
    <script type="text/javascript" src="jquery.js"></script>
  </head>
 <body>
<div id="content"></div>
<div style="margin: 5px 0;">
<form id="cometForm" action="javascript:void(0);" method="get">
<input id="word" type="text" name="word" value=""/>
<input type="submit" name="submit" value="Send"/>
</form>
</div>


<script type="text/javascript">
(function($){
function handleResponse(response){
$('#content').append('<div>' + response['msg'] + '</div>');
}

var timestamp = 0;
var url = './chat_backend.php';
var noerror = true;
var ajax;

function connect() {
ajax = $.ajax(url, {
type: 'get',
data: { 'timestamp' : timestamp },
success: function(transport) {
eval('var response = '+transport);
timestamp = response['timestamp'];
handleResponse(response);
noerror = true;
},
complete: function(transport) {
(!noerror) && setTimeout(function(){ connect() }, 5000) || connect();
noerror = false;
}
});
}

function doRequest(request) {
$.ajax(url, {
type: 'get',
data: { 'msg' : request }
});
}

$('#cometForm').on('submit', function(){
doRequest($('#word').val());
$('#word').val('');
return false;
});

$(document).ready(function(){
connect();
});
})(jQuery);
</script>

</body>
</html>
Автор: 112233 Размещён: 20.08.2016 07:46
Вопросы из категории :
32x32