91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在php中利用fsockopen cur對異步進行處理

發布時間:2020-12-19 14:39:04 來源:億速云 閱讀:131 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關如何在php中利用fsockopen cur對異步進行處理,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

首先,我們要創建一個請求入口:

<?php

提交的數據

提交給后臺

告訴用戶已經搞定了

其次,我們需要一個后臺處理程序,用戶是否在線并不影響它的運行:

<?php

ignore_user_abort(true);
set_time_limit(0);

過來的數據
數據處理

現在的問題是,在第一段代碼中,如何“提交給后臺”?我們通過一種非阻塞式的請求來實現這個功能。也就是創建一個可以被訪問的url,在這個url運行第二段程序,通過一個請求來請求這個url,從而激活第二段程序自動運行。

接下來我們直接看代碼:

// 遠程請求(不獲取內容)函數
function _sock($url) {
 $host = parse_url($url,PHP_URL_HOST);
 $port = parse_url($url,PHP_URL_PORT);
 $port = $port ? $port : 80;
 $scheme = parse_url($url,PHP_URL_SCHEME);
 $path = parse_url($url,PHP_URL_PATH);
 $query = parse_url($url,PHP_URL_QUERY);
 if($query) $path .= '?'.$query;
 if($scheme == 'https') {
  $host = 'ssl://'.$host;
 }

 $fp = fsockopen($host,$port,$error_code,$error_msg,1);
 if(!$fp) {
  return array('error_code' => $error_code,'error_msg' => $error_msg);
 }
 else {
  stream_set_blocking($fp,true);//開啟了手冊上說的非阻塞模式
  stream_set_timeout($fp,1);//設置超時
  $header = "GET $path HTTP/1.1\r\n";
  $header.="Host: $host\r\n";
  $header.="Connection: close\r\n\r\n";//長連接關閉
  fwrite($fp, $header);
  usleep(1000); // 這一句也是關鍵,如果沒有這延時,可能在nginx服務器上就無法執行成功
  fclose($fp);
  return array('error_code' => 0);
 }
}

我們創建了一個基于fsockopen的函數,這個函數中利用fsockopen去訪問url,但是在訪問時,并不要求獲取url顯示的內容,而是僅僅發出訪問請求,請求到達后馬上關閉這個訪問。這樣做的好處就是無需再等待被訪問的url是否返回了可靠的信息,節約了時間,這段代碼的執行時間在0.1-0.2秒之間,對于普通訪客而言,幾乎察覺不到。因此,在使用時,僅需要調用這個函數和對應的url即可。不過,這里并沒有提供數據傳輸的部分,如何傳輸數據,其實只需要在$header中增加post的內容即可。

除了fsockopen,curl其實也可以實現這樣的效果,有些主機上并不支持fsockopen,我們就可以使用curl來實現。

function _curl($url) {
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_TIMEOUT,1);
 $result = curl_exec($ch);
 curl_close($ch);
 return $result;
}

這段代碼的關鍵是提供了一個Timeout,僅1秒鐘,也就是說curl發出請求,無論是否接收到返回的內容,1秒鐘之后都會關閉該訪問,因此這個函數的執行數據為1.0-1.1秒之間。但對于用戶來說,如果是一個需要進行數據處理的應用,1秒中的等待幾乎是被忽略的,如果你希望用一段更簡單和容易被理解的代碼,可以選擇curl來實現。

關于如何在php中利用fsockopen cur對異步進行處理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皮山县| 阿尔山市| 吉木乃县| 涟源市| 龙陵县| 曲松县| 本溪市| 濉溪县| 夏津县| 讷河市| 湟中县| 连山| 孝昌县| 余江县| 昂仁县| 南雄市| 鄂尔多斯市| 于田县| 沛县| 罗山县| 神池县| 滕州市| 眉山市| 普安县| 平昌县| 江津市| 工布江达县| 敖汉旗| 涿州市| 辽源市| 饶阳县| 湖北省| 巴林右旗| 延庆县| 临漳县| 大宁县| 拜城县| 綦江县| 舒兰市| 威远县| 高邮市|