2015-07-13 3 views
11

Я следую за this example чат-клиентом Spring MVC, который использовал длительный опрос HTTP.Длинный опрос с php curl

Мой веб-сервер находится в порту 7555, и мне нужно сделать запрос HTTP длинного опроса на порт 7555 из порта 80 (браузер), поэтому я создал скрипт PHP, который вызывает мой веб-сервис.

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

Я называю это PHP файл из моего JavaScript с параметрами, как это:

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

РНР файл находится находится в моем локальном хосте. Это, похоже, не работает, потому что JavaScript, кажется, вызывает PHP (который вызывает URL) бесконечно. Правильно ли я делаю длинный опрос с помощью PHP curl? Мне нужно сделать вызов Ajax в JavaScript, поскольку я являюсь вызовом HTTP в curl?

+1

порт в вашем URL отличается тот, который вызван в cURL. – Inceddy

+0

Вы установили RETURNTRANSFER, но вы не поймали результат !? 'echo curl_exec ($ ch)' отсутствует. – Inceddy

ответ

0

Поскольку не разрешено отправлять cross site requests (это также относится к портам), вам нужно сделать это.

Тем не менее. Запрос одного и того же запроса снова и снова (опрос) почти прав, но ваш веб-сервис должен поддерживать соединение открытым до тех пор, пока у него не появится какая-либо новая информация или время запроса (длительный опрос).

Что делает ваш веб-сервис возврата (Http-Status нормально? Любой контент?)

+0

это не долгий опрос, он просто вызывает вызов сервера снова и снова в бесконечном цикле. Работает ли так, как предполагалось, просто вызывает php (который вызывает сервер) снова и снова –

+1

Итак, вы говорите, что это проблема с вашим JS? Но тогда, пожалуйста, обновите свой вопрос с полным кодом JS. Как я понимаю, длительный опрос: JS запрашивает ваш PHP, который запрашивает ваш веб-сервис. Вебсервис держит ваше соединение открытым для сервера PHP/Apache, который затем держит его соединение открытым для вашего запроса браузера. Таким образом, единственная причина, по которой его вызов (быстрый) снова и снова заключается в том, что кто-то в этой цепочке не закрывает свое соединение. – Inceddy

1

С CURLOPT_RETURNTRANSFER вам нужно повторить результаты curl_exec($ch)

echo curl_exec($ch); 
Смежные вопросы