Как перенаправить на самый быстро отвечающий сайт в массиве сайтов на PHP? - PullRequest
0 голосов
/ 21 октября 2018

У меня есть онлайн-функция, которая должна подключаться к самому быстрому серверу из нескольких сайтов в массиве на 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...';

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

1 Ответ

0 голосов
/ 21 октября 2018

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

В любом случае, для Php есть отличные библиотеки.Мне также интересна эта функция для Php.
. Вы можете установить с composer следующую библиотеку lib 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();

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...