Параллельный сокет в PHP

Я хотел бы знать, есть ли у кого-нибудь хорошее представление о том, как открыть несколько сокетов для одного и того же сервера, записывать и затем читать данные одновременно в PHP. Должен ли я использовать среду параллелизма, такую ​​как Amphp, или есть более подходящие варианты для этой задачи? Как бы я пошел дальше и построить это? По сути, я хочу добиться чего-то подобного неблокирующим образом:

foreach ($conns as $c) {
    $socket = socket_create(AF_INET, SOCK_STREAM, 0);
    $result = socket_connect($socket, $c['host'], $c['port']);
    socket_write($socket, $c['message'], strlen($c['message']));
    $result = socket_read ($socket, 1024);
    socket_close($socket);
    ...
}

1 ответ

Вы пишете и читаете данные последовательно в цикле. Попробуйте сделать два цикла - при первой записи, а затем при втором чтении и присвоении имен сокетам в массиве:

$socket[] = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_connect(current($socket), $c['host'], $c['port']);
socket_write(current($socket), $c['message'], strlen($c['message']));

Во втором цикле прочитайте их и закройте:

foreach ($socket as $sc) {
    $result = socket_read ($sc, 1024);
    socket_close($sc);
    ...
}
Другие вопросы по тегам