asyncsocket — Как перенаправить на самый быстро отвечающий сайт в массиве сайтов на PHP?

У меня есть онлайн-функция, которая должна подключаться к самому быстрому серверу из нескольких сайтов в массиве на PHP.

Вот как далеко я добрался. Я использовал Fopen, чтобы проверить, работает ли веб-сайт, и перенаправить на него foreach. Я подумал, что самый быстрый сервер перенаправит первым, но вместо этого он просто перенаправил последний элемент в массиве в URL.

Вот как далеко я добрался:

// The URLs to check in an Array.
$urls = ['website1.com', 'website2.com', 'website3.com'];
// Get the fastest server (the fastest server should redirect first)
foreach($urls as $proxy) {
if ($socket = @ fsockopen($proxy, 80, $errno, $errstr, 30)) {
header('Location: https://'.$proxy.'');
fclose($socket);
} else {}
}
echo 'Connecting to the fastest server...';

Заранее спасибо. Я с нетерпением жду ваших ответов 🙂

0

Решение

Похоже, что Php не предоставляет опцию, похожую на функцию обратного вызова, для получения асинхронного успешного или неудачного соединения на сокете.

Во всяком случае, там есть отличные библиотеки для Php. Я также заинтересован в этой функции для Php.
Вы можете установить с композитор следующая библиотека https://github.com/reactphp/socket
кажется довольно простым в использовании.

Найдите его слегка адаптированным к вашему случаю:

$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);
$urls = ['website1.com', 'website2.com', 'website3.com'];
foreach($urls as $proxy) {

$socket = new React\Socket\Server($proxy, $loop);

$socket->on('connection', function (ConnectionInterface $conn) {
header('Location: https://'.$proxy.'');
$conn->close();
});
});

$loop->run();

Удачи!

1

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

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