亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

php使用curl模擬多線程發(fā)送請求的代碼示例

來源:轉(zhuǎn)載 發(fā)布時(shí)間:2018-11-21 11:45:36 閱讀量:753

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php使用curl模擬多線程發(fā)送請求的代碼示例,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。

每個(gè)PHP文件的執(zhí)行是單線程的,但是php本身也可以用一些別的技術(shù)實(shí)現(xiàn)多線程并發(fā)比如用php-fpm進(jìn)程,這里用curl模擬多線程發(fā)送請求。php的curl多線程是通過不斷調(diào)用curl_multi_exec來獲取內(nèi)容,這里舉一個(gè)demo來模擬一次curl多線程并發(fā)操作。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

//設(shè)置緩沖為0(也可以去php.ini設(shè)置)

ini_set('output_buffering', 0);

//打開輸出緩沖區(qū)

ob_start();

//設(shè)置一個(gè)空數(shù)組

$curl_Arr=[];

//這里模擬20次請求

for($i=0;$i<20;$i++){

    //開啟curl連接

    $curl_Arr[$i]=curl_init("http://XXXX/test.php");

    //CURLOPT_RETURNTRANSFER 設(shè)置為1表示稍后執(zhí)行的curl_exec函數(shù)的返回是URL的返回字符串,而不是把返回字符串定向到標(biāo)準(zhǔn)輸出并返回TRUE;

    curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);

}

 

//創(chuàng)建批處理cURL句柄

$mh = curl_multi_init();

 

foreach($curl_Arr as $k => $ch){

    //curl句柄入棧增加

    curl_multi_add_handle($mh,$ch);

}

$active = null;

while(count($curl_Arr)>0){

    //發(fā)起curl_multi請求

    @curl_multi_exec($mh,$active);

    foreach($curl_Arr as $k => $ch){

        //獲取句柄的返回值

        if($result[$k]= curl_multi_getcontent($ch)){

            //輸出結(jié)果

            echo "$result[$k]\n";

            ob_flush();

            //把被釋放的數(shù)據(jù)發(fā)送到瀏覽器

            flush();

            //關(guān)閉該句柄

            curl_multi_remove_handle($mh,$ch);

            unset($curl_Arr[$k]);

        }

    }

}

//關(guān)閉ouput_buffering機(jī)制

ob_end_flush();

//關(guān)閉"curl_mulit"句柄

curl_multi_close($mh);

我再服務(wù)器上建立一起請求的php頁面命名為test.php,內(nèi)容如下

1

2

1 sleep(10);

2 echo 'seccess';exit;

表示等待十秒后數(shù)據(jù)下面語句。

然后我在命令行執(zhí)行該程序結(jié)果如下:

上面代碼中通過循環(huán)$curl_Arr數(shù)組來調(diào)用curl_multi_getcontent來查詢是否有數(shù)據(jù)。有數(shù)據(jù)就輸出并刪除元素,直到$curl_Arr數(shù)組元素個(gè)數(shù)為0。

該模擬多線程實(shí)現(xiàn)是通過使用curl的curl_multi系列函數(shù)能實(shí)現(xiàn)此功能的。至于該系列函數(shù)使用介紹,百度一搜一大把。這里就不做說明了。


標(biāo)簽: PHP
分享:
評論:
你還沒有登錄,請先