繁体   English   中英

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

[英]PHP curl timeout from node.js HTTP server

我有一个简单的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";
?>

请注意,我给了1000毫秒作为curl的连接超时,这工作正常。 我从PHP脚本中收到类似以下的消息。

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

我这里缺少任何设置吗? 我正在使用php 5.4.6curl 7.27.0

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

如果libcurl是为使用标准系统名称解析器而构建的,则该连接的该部分仍将使用整秒的分辨率进行超时,并且允许的最小超时时间为一秒。

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

更新:看起来这个先前的问题是相同的问题。 为了为此设置低于1000ms的值,您需要:

您必须使用--enable-threaded-resolver自己编译libcurl,然后针对它编译php的curl扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM