2009-11-28 171 views
1

我試圖找到一種有效的方式來觀看網頁上的服務器日誌,我不介意構建一個應用程序我只是不能制定出最好的方法來做到這一點。如何將文件的內容流式傳輸到瀏覽器

有沒有一種方法來保持一個流打開到PHP文件和瀏覽器的文件?還是必須通過每隔x秒輪詢文件來完成?

由於提前,

沙迪

回答

1

最好的解決方案絕對是AJAX的一些功能。讓服務器按照您描述的方式(維護開放流)「推」您的唯一方法是需要HTTP連接保持打開狀態,這將最終觸發超時並消耗大量資源。我會查看Cometd library。這個缺點是我相信它依賴於Java,儘管該網站確實提到了perl,python和「其他語言」。在最糟糕的情況下,您可以使用特定的碼頭實現僅用於特定端口上的日誌監視。無論如何,這個框架很可能是你最好的選擇。

任何基於網絡的聊天機制基本上都使用推送體系結構,很適合尋求一些靈感。在這種情況下,服務器創建事件(生成日誌消息時),而不是用戶創建向其他用戶發送的消息。查看this article on Facebook chat瞭解他們是如何做到的。如果你能在架構上找到一些東西,Google聊天可能值得研究。

對於實際的日誌記錄,我不確定你是否需要幫助,但log4php目前正在孵化可能是一個很好的開始,因爲它提供了一個配置,可以同時登錄任意數量的「記錄器」,比如數據庫,文件,套接字等等。你可能會發現一個可以讓你把它綁定到你選擇使用的任何推送框架中。

祝你好運!

0

做到這一點,最好的辦法是使用AJAX拉文件內容每x秒,給予實時的錯覺。

如果您確實想要實時,您可以使用XMPP服務器,但從我所看到的情況來看,第一種解決方案已經足夠,並且不需要大量工作。

+0

你可以多解釋一下XMPP服務器部分,或者指出相關信息的方向,因爲我似乎無法找到適合我的工作的東西... – 2009-11-28 18:53:40

+0

XMPP是一個通信協議(就像HTTP一樣,用於網頁)。但與HTTP不同,XMPP適用於實時通信,並且可以實現數據推送數據和負載平衡等功能。使用XMPP通常需要專用服務器,Ejabberd是最着名的之一,但需要Erlang的知識。這是一個非常強大的解決方案,但它可能是過度的,你需要大量的工作來完成AJAX在一個小時內處理得很好的事情。 – 2009-11-28 19:04:02

1

請記住,Web模型本質上是無狀態的(已斷開連接)。考慮到客戶端提交請求時,服務器會處理請求,然後相應地發送響應。您可以使用Cookie和/或會話追蹤客戶端操作,但在響應提交回來之後釋放爲請求保留的資源。 我認爲實現您的目標的最佳方式是開發一個Web服務,用於檢查日誌的狀態並獲取diff(如果有)。您的應用可能包含一個帶有div的網頁,該網頁將顯示來自Web服務的差異。 帶定時器的腳本將觸發對Web服務的調用。 我會在幾周內嘗試做這樣的事情,我會在moropo blog(西班牙語)上發佈整個解決方案。您可以使用評論請求翻譯。

相關問題