我正在用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中的異步套接字連接將會非常棒。很好的問題! –