2015-07-13 3 views
11

Sto seguendo this example per il client di chat Spring MVC che ha utilizzato il polling lungo HTTP.Polling lungo con curl php

Il mio server Web si trova sulla porta 7555 e devo essere in grado di effettuare una richiesta polling HTTP lunga per la porta 7555 dalla porta 80 (browser), quindi ho creato uno script PHP che chiama il mio webservice.

<?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) 
?> 

Io chiamo questo file PHP dal mio JavaScript con i parametri in questo modo:

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

Il file PHP si trova si trova nel mio localhost. Questo non sembra funzionare perché JavaScript sembra chiamare il PHP (che chiama l'URL) all'infinito. Sto facendo un lungo polling correttamente con PHP curl? Devo fare la chiamata Ajax in JavaScript poiché sono la chiamata HTTP in curl?

+1

Il Porto nel tuo URL è diverso da quello chiamato in cURL. – Inceddy

+0

Hai impostato RETURNTRANSFER ma non ottieni il risultato !? "echo curl_exec ($ ch)" manca. – Inceddy

risposta

0

Poiché non è consentito inviare cross site requests (ciò vale anche per le porte) è necessario eseguire questa funzione relais PHP.

Mai meno. Richiedere la stessa richiesta più e più volte (polling) è quasi corretta, ma il tuo servizio web dovrebbe mantenere la connessione aperta fino a quando non riceve alcune nuove informazioni o la richiesta scade (polling lungo).

Che cosa significa il ritorno del servizio Web (HTTP-Stato ok? Qualsiasi contenuto?)

+0

non esegue il polling lungo, continua a chiamare il server più e più volte in un ciclo infinito. Funziona come previsto chiama semplicemente il php (che chiama il server) più e più volte ancora –

+1

Quindi dici che è un problema con il tuo JS? Ma poi aggiorna la tua domanda con il codice JS completo. Come ho capito per un lungo sondaggio: JS interroga il tuo PHP che interroga il tuo webservice. Il webservice mantiene la connessione aperta al server PHP/Apache che mantiene aperta la sua connessione alla richiesta del browser. Quindi, l'unica ragione per cui la sua chiamata (veloce) più e più volte è che qualcuno in questa catena non sta mantenendo la sua connessione aperta. – Inceddy

1

Con CURLOPT_RETURNTRANSFER è necessario eco i risultati di curl_exec($ch)

echo curl_exec($ch);