Параллелизм сокетов в переполнении стека

Я хотел бы знать, есть ли у кого-нибудь хорошее представление о том, как открыть несколько сокетов для одного и того же сервера, записывать и затем читать данные одновременно в 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);
...
}

0

Решение

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

$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);
...
}
0

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

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