Я использую popen с fgets для асинхронного чтения вывода tcpdump.
Код ниже должен быть запущен в командной строке, а не с apache и просмотрен в браузере.
$handle = popen('tcpdump -nnX', 'r');
while (true) {
$output = fgets($handle);
print $output . "\n";
}
Проблема возникает, когда я пытаюсь вывести эту информацию через websockets.
В Websockets также используется бесконечный цикл (для управления его сокетами, тиками и сообщениями).
Это выглядит примерно так:
while (true) {
@socket_select($read,$write,$except,1);
foreach ($read as $socket) {
if ($socket == $this->master) {
$client = socket_accept($socket);
...
Я отправляю данные через websocket с помощью $websocket- > sendToAll ($ message);
-
Я не могу поместить циклы while один за другим, потому что он будет запускать только тот цикл, который я поставил первым,
while (true) { A() }; while (true) { B() };
B() никогда не будет называться -
Я не могу объединить циклы while, потому что веб-узлы замедляют чтение popen и наоборот.
while (true) { A(); B(); }
, если B занимает много времени, A будет медленно запускаться.
Что я могу сделать в этой ситуации? Я открыт для идеи потоков, связи между разветвленными скриптами или чем-то еще.