来自node.js HTTP服务器的PHP curl超时

我有一个简单的Node.js HTTP服务器运行(下面的代码),我试图立即响应任何请求,然后asynchronous处理请求。

var http = require('http'); var url = require('url'); var querystring = require('querystring'); http.createServer(function parseRequest(request, response){ // Responding without any delay response.end(); var query = url.parse(request.url).query; var param1 = querystring.parse(query)["param1"]; var param2 = querystring.parse(query)["param2"]; console.log("Param1: " + param1 + " and param2: " + param2); }).listen(8888); console.log("HTTP server started on port 8888"); 

我有另一个PHP脚本(下面的代码)发送一个Curl GET请求到HTTP服务器。 我指定了以毫秒为单位的curl连接超时

 <?php $url = "http://127.0.0.1:8888?param1=value1&param2=value2"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, 1000); $start_time = microtime(); $response = curl_exec($curl); $stop_time = microtime(); if(curl_errno($curl) != 0) echo "Curl error " . curl_error($curl) . "\n"; curl_close($curl); echo "Started at " . $start_time . " and stopped at " . $stop_time . "\n"; ?> 

请注意,我给了作为curl连接超时1000毫秒,这工作正常。 我从我的PHP脚本中得到如下信息。

开始于0.57268300 1386132518,并停在0.58577100 1386132518

但是,当我给一个小于1000(甚至999)的值,curl连接超时,我得到以下消息

curl错误超时已达到

开始于0.55238500 1386131950并停在0.55245800 1386131950

有没有我在这里失踪的设置? 我使用PHP 5.4.6curl7.27.0

在查看有关此超时值的PHP文档时,可能会遇到本地系统的限制。 文档状态:

如果构buildlibcurl以使用标准系统名称parsing器,那么连接的那部分将仍然使用全秒分辨率超时,允许的最小超时时间为1秒。

在将该值设置为允许超时的最小值以下时,可能会导致系统自动触发超时。

更新:看起来像以前的问题是相同的问题。 为了设置这个1000毫秒的值,你需要:

你必须为自己编译libcurl,使用–enable-threaded-resolver,然后编译curl扩展名来反对它