PHP Foreach Параллельные сокет-соединения? - PullRequest
0 голосов
/ 13 мая 2011

У меня есть скрипт, который подключается к списку серверов в цикле foreach, используя ассоциативный массив с IP-адресом в качестве ключа и номером порта в качестве значения.Я записываю небольшое количество данных в сокет, а затем зачитываю ответ сервера.Обычно в массиве 5-15 серверов, и каждая транзакция может занять несколько сотен миллисекунд, что быстро увеличивает время ожидания пользователя.Есть ли способ, которым я могу выполнять соединения параллельно, чтобы пользователям не пришлось ждать так долго?

foreach ($clients as $network_address => $port)
{
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        continue;
    }

    $result = socket_connect($socket, $network_address, $port);
    if ($result === false) {
        continue;
    }

    socket_write($socket, $data, strlen($data));

    $response[$network_address] = socket_read($socket, 2048);

    socket_close($socket);
}

1 Ответ

0 голосов
/ 13 мая 2011

Использование socket_select ( массив & $ read , array & $ write , array & $ кроме , int * $ tv_sec * [, int * $ tv_usec * = 0]) - лучший способ поговорить с другимизатем один хост.

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