使用PHP cURL进行长轮询

11

我正在遵循这个示例来实现使用HTTP长轮询的Spring MVC聊天客户端。

我的Web服务器位于端口7555,并且我需要能够从端口80(浏览器)向端口7555发出HTTP长轮询请求,因此我创建了一个调用我的Web服务的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)
?>

我用类似这样的参数从JavaScript调用这个PHP文件:

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

PHP文件位于我的本地主机上。这似乎不起作用,因为JavaScript似乎无休止地调用了PHP(它调用URL)。我是否正确地使用了PHP curl进行长轮询?由于我正在使用curl中的HTTP调用,所以我需要在JavaScript中进行Ajax调用吗?


1
您的URL端口与cURL中调用的端口不同。 - Inceddy
你已经设置了RETURNTRANSFER,但是你没有捕获结果!? 缺少echo curl_exec($ch) - Inceddy
2个回答

1
使用CURLOPT_RETURNTRANSFER,您需要回显curl_exec($ch)的结果。
echo curl_exec($ch);

0

由于不允许发送跨站请求(端口也是如此),因此您需要使用PHP中继。

尽管如此,反复请求相同的请求(轮询)几乎是正确的,但是您的Web服务应该保持连接打开,直到它有一些新信息或请求超时(长轮询)。

您的Web服务返回什么(Http-状态正常?任何内容?)


它不会进行长轮询,而是在一个无限循环中不断调用服务器。它按预期工作,只是一遍又一遍地调用 PHP(它再次调用服务器)。 - Jonatha Suh
1
所以你说这是你的JS有问题?那么请更新你的问题并附上完整的JS代码。 据我理解,长轮询:JS查询您的PHP,然后查询您的Web服务。 Web服务保持与PHP / Apache服务器的连接,然后保持其连接打开以响应您的浏览器请求。因此,它一遍又一遍地调用(快速)的唯一原因是,该链中的某个人没有保持他的连接打开。 - Inceddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接