通过 websockets 发送 popen 的输出
我正在使用带有fges的popen来异步读取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->发送到所有($message);。
我不能把 while 循环一个接一个地放,因为它只会运行我放在第一个循环中的任何一个,B() 永远不会被调用
while (true) { A() }; while (true) { B() };
我无法合并 while 循环,因为 websockets 会减慢 popen 的读取速度,反之亦然。 如果B需要很长时间才能完成,A将运行缓慢。
while (true) { A(); B(); }
在这种情况下我该怎么办?我对线程,分叉脚本之间的通信或其他任何东西的想法持开放态度。