2016-08-20 3 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

基本的に、サーバーはデータが利用可能になるまで応答しません。ところで、通常の古いPHPは、実際にはスケーラブルではないので、実際にはこれ用に設計されていません。すばやくすべてのリソースを使い果たします。 –

+0

@ AlexanderO'Mara、私のサーバーがphp5以上を使用していることを確認します。しかし、サーバーはどのように応答しますか、疑似コードを表示できますか? – 112233

答えて

0

は、最後に私はここで答えを見つけました:

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

私がサイトで与えられた第二の例を選びました:古典的なAJAXと彗星 それは魔法のように動作します。以下は、サイトから取られた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> 
関連する問題