从父级到多个子级进行cURL并执行mysqli查询时,出现错误(连接过多)
我尝试过仅在父级以及父级和子级中使用持久性连接。当我从父母到25个孩子进行URL测试时,大约要处理20个孩子,然后出现“连接过多”错误。日志确认并非所有子进程都在执行。
这是父母的代码:
<!-- parent start -->
$link = mysqli_connect('p:host', 'user', 'password', 'database');
$sql = mysqli_query($link, "SELECT * FROM t1");
$rowcount = mysqli_num_rows($sql);
if ($rowcount > '0') {
$mh = curl_multi_init();
$active = null;
}
while ($row = mysqli_fetch_assoc($sql)) {
$sql2 = mysqli_query($link, "SELECT id FROM t2 WHERE field1 = 'Waiting'");
$row2 = mysqli_fetch_assoc($sql2);
extract($row2);
// spawn child process
$ch = '$ch' . $id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'loadtest.child.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, 'loadtest.parent.php');
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$curl_data = 'jid=' . $id;
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curl_data);
curl_multi_add_handle($mh,$ch);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($active > 0);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
?>
<!-- parent end -->
还有孩子:
<!-- child start -->
$link = mysqli_connect('p:host', 'user', 'password', 'database');
$sql = mysqli_query($link, "SELECT * FROM t3 WHERE field1 ='" . $jid . "' LIMIT 1");
$row = mysqli_fetch_assoc($sql);
extract($row);
$sql2 = mysqli_query($link, "SELECT * FROM t4 WHERE field1='" . $jid . "' LIMIT 1");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'loadtest.script.php);
$result = curl_exec($ch);
curl_close($ch);
$sql_update = mysqli_query($link, "UPDATE t1 SET status = 'Processed' WHERE field1 = '$jid'");
<!-- child end -->
我从父级和子级中删除了一些写入日志的代码,并且子级中对loadtest.script.php的引用是一个占位符,该占位符只不过是在文本文件中写了一行。
现在,我位于共享服务器上,最多无法更改240个连接。我将在不久的将来使用专用服务器。
关于如何使子代在相同的持久连接上运行并避免“太多连接” mysql错误的任何建议?
还有其他建议。
谢谢。