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



我有一个简单的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服务器发送CurlGET请求。我正在指定卷曲连接超时(以毫秒为单位)

<?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提供了1000ms作为连接超时,这很好。我从我的PHP脚本中得到如下消息。

开始于0.57268300 1386132518,停止于0.58577100 13861325.18

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

卷曲错误达到超时

起始于0.55238500 1386131950,终止于0.55245800 1386131950

这里有我遗漏的设置吗?我使用的是php 5.4.6curl 7.27.0

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

如果libcurl是使用标准的系统名称解析程序构建的,那么连接的这一部分仍然会对超时使用全秒解析,允许的最小超时为1秒。

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

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

您必须使用--enable线程解析器为自己编译libcurl,然后根据为php编译curl扩展

最新更新