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

node.js HTTP服务器的PHP curl超时,php,node.js,curl,http-get,Php,Node.js,Curl,Http Get,我有一个简单的Node.js HTTP服务器正在运行(下面的代码),我试图立即响应任何请求,然后异步处理该请求 var http = require('http'); var url = require('url'); var querystring = require('querystring'); http.createServer(function parseRequest(request, response){ // Responding without any delay

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

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脚本(下面的代码),它向HTTP服务器发送一个Curl-GET请求。我正在以毫秒为单位指定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.572683001386132518开始,在0.585771001386132518停止

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

已达到卷曲错误超时

起点为0.55238500 1386131950,终点为0.55245800 1386131950


这里有我缺少的设置吗?我使用的是php 5.4.6和curl 7.27.0。

在查看关于此超时值的php文档时,您可能会遇到本地系统的限制。国家:

如果libcurl构建为使用标准系统名称解析程序,那么connect的该部分仍将使用完整的秒解析超时,允许的最小超时时间为1秒

如果将该值设置为低于允许超时的最小值,则可能会导致系统自动触发超时

更新:看起来这是同一个问题。要为此设置小于1000ms的值,您需要:

您必须自己编译libcurl,使用--enable线程解析器,然后针对它编译php的curl扩展


谢谢使用--enable线程解析器从源代码构建libcurl解决了这个问题。很抱歉,我发了一个重复的问题。