我想知道是否可以將應用程序的輸出從php運行到客戶端。在PHP中執行異步外部應用程序
,比如我有應用程序,輸出:
Hello world
,10秒鐘後它輸出
10 seconds passed
我想知道,如果它可以發送「你好」和「字10秒鐘「傳遞給客戶,而無需等到整個程序完成其工作。客戶將首先收到「Hello world」,並在10秒後輸出第二個。
謝謝。
我想知道是否可以將應用程序的輸出從php運行到客戶端。在PHP中執行異步外部應用程序
,比如我有應用程序,輸出:
Hello world
,10秒鐘後它輸出
10 seconds passed
我想知道,如果它可以發送「你好」和「字10秒鐘「傳遞給客戶,而無需等到整個程序完成其工作。客戶將首先收到「Hello world」,並在10秒後輸出第二個。
謝謝。
您的標題說「異步外部應用執行」。由此,你的意思是從PHP腳本執行一個程序,然後在自己的進程中繼續執行,而不是掛起PHP頁面加載。您可能希望passthru()
專門設置命令以輸出到本地文件而不是腳本(個人未經測試,儘管PHP手冊說可以),或pcntl_fork()
將腳本拆分爲單獨的進程,該進程將處理程序執行旁邊。但是,除非您在客戶端安裝了一個會自動接受您的第二個新的tcp強制連接的木馬,否則在它已經與服務器斷開連接之後重新發送到瀏覽器並期望它顯示您的未經請求的消息是不可能的。
但是,如果您想爲您的頁面加載進度消息,只需在一些for
或while
循環的任意位置回顯「仍在加載...」。另一方面,文件下載進度條不能在PHP中處理。在下載過程中迴應「仍在加載...」會損壞文件。目前,我不知道任何使用任何PHP,Javascript或VB方法執行此操作的工具,除非在客戶端通過安裝您創作的插件允許的情況下,在瀏覽器自己的API中(如果有文檔)。但是,爲什麼瀏覽器已經內置進度條?
我認爲你應該用javascript來做到這一點。在服務器上使用cpu-cycles是完全沒有必要的,直到你的所有需求都是顯示時間過去爲止。
通常情況下,客戶端從服務器獲取內容。如果你想推從服務器到客戶端,你需要看看push technologies像Comet。雖然有not too much available for PHP。定期推送使用終止於中間的PHP腳本需要Message Queue。
我不明白你的應用程序,但批量處理這一浮現在腦海:
PHP HELLO-world.php | php client.php
要調整它,請使用Hadoop。
這是因爲您的頁面可能需要超過10秒才能加載?有點像進度條嗎?或者在頁面已經加載之後發生第二條消息? – 2010-07-21 06:54:05