Как я могу поддерживать постоянную связь mysqli с родителем и детьми cURL

Я получаю ошибки (слишком много соединений), когда я cURL от родителя к нескольким детям и выполняю запросы mysqli

Я пытался использовать постоянные соединения только с родителем, а также с родителями и детьми. Когда я проверяю от родителя до 25 детей в качестве теста, примерно 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 -->

Я удалил некоторый код из родительского и дочернего, который записывает в журналы, и ссылка в child на loadtest.script.php относится к заполнителю, который не делает ничего, кроме записи одной строки в текстовый файл.

Прямо сейчас я нахожусь на общем сервере и имею максимум 240 соединений, которые я не могу изменить. Я буду идти на выделенный сервер в ближайшее время.

Любые предложения о том, как заставить детей работать на том же постоянном соединении и избежать ошибки mysql «слишком много соединений»?

Также любые другие предложения будут оценены.

Благодарю.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]