У меня есть простой HTTP-сервер Node.js (следующий код), где я пытаюсь ответить на любой запрос немедленно, а затем обрабатывать запрос асинхронно.PHP curl timeout from 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-скрипт (следующий код), который отправляет запрос Керла GET на HTTP-сервер. Я с указанием локон тайм-аут соединения в миллисекундах
<?php
$url = "http://127.0.0.1:8888?param1=value1¶m2=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 мс в качестве соединения тайм-аут для завитка, и это работает отлично. Я получаю сообщение, подобное следующему из моего PHP-скрипта.
Начатый в 0.57268300 1386132518 и остановился на 0.58577100 1386132518
Но когда я даю значение меньше 1000 (даже 999), завитка раз соединение, и я получаю следующее сообщение
Curl ошибка таймаута была достигнута
Начатый в 0.55238500 1386131950 и остановился на 0,55245800 1386131950
Есть ли какие-либо настройки, которые мне не хватает здесь? Я использую php 5.4.6 и curl 7.27.0.
Спасибо. Создание libcurl из источника с помощью --enable-threaded-resolver решило проблему. Мои извинения за отправку дубликата вопроса. – tilmik