如何在PHP中打开多个套接字连接和执行回调
我正在写一些处理一个项目队列的代码。其工作方式如下:如何在PHP中打开多个套接字连接和执行回调,php,sockets,curl,callback,Php,Sockets,Curl,Callback,我正在写一些处理一个项目队列的代码。其工作方式如下: 将下一个项目标记为需要 要从mysql进行处理 数据库行 从谷歌API请求一些信息 使用Curl,等待信息显示出来 返回 完成剩余的处理 基于返回的信息 将项目标记为已在中处理 db,进入下一项 问题是在第二步。谷歌有时需要10-15秒来返回请求的信息,在此期间,我的脚本必须保持暂停并等待 我想知道是否可以更改代码以执行以下操作: 获取接下来要处理的5项 像往常一样 项目1-5的请求信息来自 谷歌,一个接一个 当项目1的信息为 返回时,应返回
如何实现这样的目标?您可以将其分为两种流程类型
exec
)以保持其为N,直到所有工作完成您可以将其分为两种进程类型
exec
)以保持其为N,直到所有工作完成我真的不知道这是否是一种优雅的方法,但从理论上讲,您可以使用fork()为每个项目派生PHP进程。这将允许所有代码都在一个文件中
// Get items from DB
$items = get_items_from_db();
foreach($items as $item) {
$pid = pcntl_fork();
if($pid == -1) die("Couldn't fork!");
if(!$pid) {
// Process the item in the child process
process_item($item);
exit();
}
}
// Wait for all child processes to end
pcntl_wait();
// We're done!
但是,是的,这个解决方案很可能会让一些人尖叫;) 我真的不知道这是否是一种优雅的方法,但在理论上,您可以使用fork()为每个项目派生PHP进程。这将允许所有代码都在一个文件中
// Get items from DB
$items = get_items_from_db();
foreach($items as $item) {
$pid = pcntl_fork();
if($pid == -1) die("Couldn't fork!");
if(!$pid) {
// Process the item in the child process
process_item($item);
exit();
}
}
// Wait for all child processes to end
pcntl_wait();
// We're done!
但是,是的,这个解决方案很可能会让一些人尖叫;) 我认为您可以创建一个主脚本,在同一台机器上为特定项目调用子脚本。子脚本将向google API发送请求并相应地工作。我认为您可以创建一个主脚本,在同一台机器上为特定项目调用子脚本。子脚本将向GoogleAPI发送请求并相应地工作