fsockopen 非同步非阻塞式請求資料

2022-07-08 20:24:10 字數 3368 閱讀 6156

index.php

<?php

ini_set ( "max_execution_time", "0");

//要傳遞的資料

$form_data = array

( 'name' => 'testname',

'gender' => 'man');

//提交的檔案資訊

請求位址埠資訊

// 請求的網域名稱例:baidu.com,這裡是 localhost

$host = 'localhost';

$port = 80;

$errno = '';

$errstr = '';

//設定連線超時時間

$timeout = 60;

//請求網域名稱後詳細位址

$url = '/test/index2.php?testget=testval';

//如果是get 請求,可直接將編譯後的引數放到url上

//請求方式

$method = "post";

//建立連線控制代碼

$fp = fsockopen ( $host, $port, $errno, $errstr, $timeout

);if (! $fp

) //

0,資源流將會被轉換為非阻塞模式;如果是1,資源流將會被轉換為阻塞模式

// 將此鏈結控制代碼變為非阻塞模式,如果傳值中有檔案,則非同步無效,並且傳值陣列中檔案以後的傳值內容也無法正常傳值

stream_set_blocking ( $fp, 0);

//post傳值有兩種方式

//********************= 第一種,無需傳遞檔案 ********************=

//格式化一下

也可以傳遞json資料,直接json編譯下陣列即可

// $data = json_encode ( $form_data ) ;

//********************= 第一種,無需傳遞檔案結束 ********************=

//********************= 第二種,可以傳遞檔案,但不能設定 stream_set_blocking 等於 0 ********************=

/*srand((double)microtime()*1000000);

$boundary = "---------------------------".substr(md5(rand(0,32000)),0,10);

$data = "--$boundary\r\n";

foreach($form_data as $key=>$val)

// file data

foreach($file_data as $file)

$data .="--\r\n\r\n";

*///

********************= 第二種,可以傳遞檔案結束 ********************=

// 連線控制代碼不報錯就拼接請求內容

//**********====不同傳值方式 content-type 值*************************===

//get及post第一種,無需傳遞檔案

//post第二種,可以傳遞檔案

//$out .= "content-type:multipart/form-data; boundary=$boundary\r\n";

//**********====不同傳值方式 content-type 值結束*************************===

$out .= "content-length:" . strlen ( $data ) . "\r\n";

$out .= "connection:close\r\n\r\n";

$out .= "$";

//傳送請求

fputs ( $fp, $out

);//

非阻塞模式需要設定系統延時,否則程式會不等待收到結果就往下執行**,這時會有獲取不到結果的情況

// 具體設定延時多長時間,具體還要看介面的響應時間多久

usleep ( 5000);

//獲取返回內容(包含響應頭資訊)

$response = '';

while ( $row = fread ( $fp, 4096) )

//關閉鏈結

fclose ( $fp

);//

過濾返回的響應頭資訊

// strpos() 函式查詢字串在另一字串中第一次出現的位置。

$pos = strpos ( $response, "\r\n\r\n");

$header = substr ( $response, 0, $pos

);$result = substr ( $response, $pos + 4);

echo

$header,"

";//

輸出返回結果

//post json方式傳值

$data = file_get_contents('php://input');

$data = json_decode($data,true);

echo $data['name'],"

";echo $data['gender'],"";

*/exit ();

非同步非阻塞

sk.setblocking false 不會阻塞但是會報錯 setattr sk,callback func url func 1 try 阻塞,非阻塞報錯,捕捉錯誤 sk.connect url func 0 80 except blockingioerror as e pass while t...

非同步非阻塞

首先討論下使用事件驅動,非同步程式設計的優點 充分利用了系統資源,執行 無須阻塞等待某種操作完成,有限的資源可以用於其他的任務。其非常適合於後端的網路服務程式設計。在伺服器開發中,併發的請求處理是個大問題,阻塞式的函式會導致資源浪費和時間延遲。通過事件註冊 非同步函式,開發人員可以提高資源的利用率,...

阻塞,非阻塞,非同步,同步

之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...