我正在尝试重写我的代码以支持多线程,这是一个简单的代码,但我不知道如何做到,基本上它所做的是
- 使用curl-->请求第一个网页以获得唯一的id
- 使用唯一id请求另一个页面-->以获取会话
- 使用会话请求另一个页面--->sleep(),然后重试
现在这是单个线程所做的,但我想在同一时间创建许多线程
我所做的是,创建3个sperate文件
第一个创建了10个会话,并将它们与其他参数(session1|unique_id1|paramter1|anotherparameter1)一起保存在txt文件中
第二个文件包含此代码
$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文件,每行打开一个带有argv 中行号的请求文件
在第三个文件中,它获取行号,打开会话文件,检索会话的参数,并使用该会话发送请求
这就是我的多线程处理方式,但我觉得我用rocks编写了php代码现在我想重写它,而不必打开10 sperate php进程
在PHP中确实没有原生的线程处理方法。你采取的方法是有效的,但我会采取不同的方法。在PHP中分叉进程是可能的。我已经做到了,而且效果很好。
一种方法是使用一些消息传递系统,如RabbitMQ,并以这种方式分发工作。基本上是演员或酒吧的子模型。
另一种可能对您有效的方法是"pthreads"。http://php.net/manual/en/book.pthreads.php
我自己没有尝试过这种方法,所以我无法向您详细说明它的效果或不效果。
希望这能有所帮助!