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