2016-08-20 11 views
0

실시간 효과를주기 위해 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); 
})() 

중복으로 표시된이 질문 이후 :

나는 완전히 롱 폴링과 혜성의 개념을 이해했다. 여기서 개념을 이해하는 것이 아니라 개념을 실제로 구현하는 코드에 대해 설명합니다.

+0

가능한 복제 [무엇입니까 롱 폴링, WebSocket을, 서버 전송 이벤트 (SSE)와 혜성?] (http://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet) –

+0

기본적으로 서버는 데이터를 사용할 수있을 때까지 응답하지 않습니다. BTW, 보통의 PHP는 실제로 이것을 위해 설계되지 않았습니다. 실제로 확장 성이 없기 때문에 모든 리소스를 빠르게 사용하게됩니다. –

+0

@ AlexanderO'Mara, 제 서버가 php5 이상을 사용하는지 확인하겠습니다. 그러나 서버가 어떻게 반응합니까? 의사 코드를 표시 할 수 있습니까? – 112233

답변

0

마지막으로 여기 해답을 발견 : 혜성 그것은 매력처럼 작동 고전 아약스 로 : 나는 사이트에 주어진 두 번째 예제를 선택했다

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

. 다음은 또한 사이트에서 가져온 JQuery와의 index.html을 (클라이언트 페이지)에 대한 코드는 ...입니다

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