我正在用fgets使用popen异步读取tcpdump的输出。通过websockets发送popen输出
下面的代码应该在命令行中运行,而不是使用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-> sendToAll($消息)WebSocket的发送数据;.
我不能把while循环,一个接一个,因为它将只运行我把取环第一,
while (true) { A() }; while (true) { B() };
B()将永远不会被称为我不能合并的,而因为websockets会减慢popen的读取速度,反之亦然。
while (true) { A(); B(); }
如果B需要很长时间才能完成,A的运行速度会很慢。
在这种情况下我该怎么办?我对线程的思想,叉脚本之间的通信或其他任何东西都是开放的。
不酷,崩溃我的浏览器,并使浏览器发疯,发出警告>。< –
@IndigoIdentity新增。我的问题只关注cli,这里没有涉及浏览器。 (除了使用websockets进行查看,但这里省略的代码) –
好吧,这部分是我自己的错,因为我之前在IP套接字上输入IP并输出到浏览器中,所以我已经将这种思想融入了我的心中。现在想一想,PHP中的异步套接字连接将会非常棒。很好的问题! –