2015-07-13 43 views
11

HTTP uzun yoklama kullanılan Spring MVC sohbet istemcisi için this example'u izliyorum.Php curl ile uzun yoklama

Web sunucum 7555 numaralı bağlantı noktasında bulunuyor ve bağlantı noktası 80'den (tarayıcı) 7555 numaralı bağlantı noktasına bir HTTP uzun yoklama isteği yapabilmem için web servisimi çağıran bir PHP betiği oluşturdum.

($.ajax({ 
    url : "http://localhost/myphpscript.php?index=" + i, 
    type : "GET", 
    cache: false, 
    success : function(messages) { 
     //do stuff 
    } 
})); 

bulunduğu PHP dosyası benim localhost bulunur:

<?php 
$index = $_GET["index"]; 
echo $index; 
echo $index2; 

$urlVar = "http://localhost:7555/test?" . $index . $index2; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $urlVar); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_PORT, 7305); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_exec($ch) 
?> 

böyle parametrelerle benim JavaScript Bu PHP dosyası diyoruz. Bu, işe yaramaz gibi görünmüyor çünkü JavaScript, PHP'yi (URL’yi çağıran) sonsuz olarak çağırıyor gibi görünüyor. PHP curl ile doğru uzun oylama yapıyorum? Curl'de HTTP çağrısı olduğum için Ajax çağrısı yapmalı mıyım?

+1

Liman sonuçlarını yankı gerekir farklıdır cURL denilen biri. – Inceddy

+0

RETURNTRANSFER'ı ayarladınız ama sonucu yakalamıyorsunuz !? echo curl_exec ($ ch) 'eksik. – Inceddy

cevap

0

cross site requests (bu bağlantı noktaları için de geçerlidir) göndermesine izin verilmediğinden, bu PHP relais işlemini yapmanız gerekir.

Asla daha az değil. Aynı talebi tekrar tekrar talep etmek (yoklama) hemen hemen doğrudur, ancak web servisiniz yeni bir bilgi veya istek zaman aşımına uğrayana kadar bağlantıyı açık tutmalıdır (uzun yoklama).

ne yapar web hizmeti dönüş (Tamam HTTP-Durum? Her türlü içerik?)

+0

uzun anket yok, sadece sonsuz bir döngü içinde tekrar tekrar sunucuyu aramaya devam ediyor. İstendiği gibi çalışmak sadece php'yi (sunucuyu arayarak) tekrar tekrar çağırıyor mu? –

+1

Yani JS'nizde bir sorun olduğunu mu söylüyorsunuz? Ancak lütfen sorununuzu tam JS koduyla güncelleyin. Uzun yoklamayı anladığım kadarıyla: JS, web servisinizi sorgulayan PHP'nizi sorgular. Web hizmeti, bağlantınızı PHP/Apache sunucusuna açık tutar ve ardından bağlantıyı Tarayıcı isteğinize açık tutar. Dolayısıyla, tekrar tekrar çağrılmasının tek nedeni, bu zincirdeki birisinin bağlantısını açık tutmamasıdır. – Inceddy

1

CURLOPT_RETURNTRANSFER ile URL'nizde curl_exec($ch)

echo curl_exec($ch);