PHP实现异步请求非阻塞
PHP实现异步请求非阻塞
function fosck_post($url, $param){
$host = parse_url($url, PHP_URL_HOST);
$port = 80;
$urlInfo = parse_url($url);
if (isset($urlInfo['scheme']) && strcasecmp($urlInfo['scheme'], 'https') === 0) //HTTPS
{
$prefix = 'ssl://';
$port = 443;
}else{ //HTTP
$prefix = 'tcp://';
$port = isset($urlInfo['port']) ? $urlInfo['port'] : 80;
}
$errno = '';
$errstr = '';
$timeout = 30;
$data = http_build_query($param);
// create connect
$fp = fsockopen($prefix. $host, $port, $errno, $errstr, $timeout);
if(!$fp){
return false;
}
// send request
$out = "POST ${url} HTTP/1.1\r\n";
$out .= "Host:${host}\r\n";
$out .= "Content-type:application/x-www-form-urlencoded\r\n";
$out .= "Content-length:".strlen($data)."\r\n";
$out .= "Connection:close\r\n\r\n";
$out .= "${data}";
fwrite($fp, $out);
//忽略执行结果;否则等待返回结果
// if(APP_DEBUG === true){
if(false){
$ret = '';
while (!feof($fp)) {
$ret .= fgets($fp, 128);
}
}
usleep(20000); //fwrite之后马上执行fclose,nginx会直接返回499
fclose($fp);
}

浙公网安备 33010602011771号