2015-03-02 301 views
-1

我試圖重寫我的代碼以支持多線程多線程,它是一個簡單的代碼,但我無法弄清楚如何做到這一點,基本上是什麼做的是我該怎麼辦在PHP

  1. 請求第一個帶curl的網頁 - >得到一個唯一的ID
  2. 使用唯一的ID來請求另一個頁面 - >獲得一個會話
  3. 使用會話請求另一個頁面---> sleep()然後做它再次

現在這是一個單一的thr EAD做的,但我想在同一時間

我所做的是,創建3個sperate文件

第一個創造了10屆,並將它們保存在其他參數的txt文件,創造了很多的線程(會話1 | unique_id1 | paramter1 | anotherparameter1)

第二個文件包含的代碼

$sessions = file('sessions.txt'); 
$WshShell = new COM("WScript.Shell"); 
foreach($sessions as $kk => $session) { 
    if (!empty($session)) { 

    $oExec = $WshShell - > Run("php requests.php $kk", 0, false); 
    } 

} 

它打開txt文件,和foreach線它打開請求具有行數argv中

文件210

,並在第三個文件,它走線數量,並開啓了會議文件,retreive會議的paramater並與該會話

所以這是我做了我的多線程發送請求,但我覺得我寫了一個PHP代碼與岩石 現在我想重寫它,而無需打開10 sperate php過程

+1

http://php.net/manual/en/intro.pthreads.php - PThreads是將線程添加到PHP的擴展。我個人只是分叉進程。 – kainaw 2015-03-02 17:33:11

+0

感謝您的答案,你能至少幫我多線程後,我得到的會議,我的意思是我想打開所有會議一次使用捲曲 ,我不明白如何curl_multi工作:/ – javodri 2015-03-02 17:34:38

+0

首先,你需要安裝pthreads擴展。如果您沒有安裝擴展程序,爲pthreads編寫代碼是毫無意義的。我提供的鏈接顯示瞭如何安裝它以及如何創建線程。 – kainaw 2015-03-02 17:36:11

回答

-1

真的沒有一種原生的方式來執行線程在PHP中。你採取的方法有效,但我會以不同的方式處理。可以在PHP中分叉進程。我已經完成並且運作良好。

一種方法是使用像RabbitMQ這樣的郵件系統並以這種方式分發工作。基本上是一個Actor或Pub-sub模型。

另一種可能適合你的方法是「pthreads」。 http://php.net/manual/en/book.pthreads.php

我還沒有嘗試過這種方法,所以我不能告訴你它有多好或沒有工作的細節。

希望這會有所幫助!