2015-03-02 137 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

我还没有尝试过这种方法,所以我不能告诉你它有多好或没有工作的细节。

希望这会有所帮助!