2010-05-04 27 views
2

我有興趣在基於網絡的設備上添加基於HTML/Web瀏覽器的「日誌窗口」。具體來說,我的設備有一個自定義的Web服務器和一個事件日誌,我希望能夠讓一個Web瀏覽器窗口打開,例如http://my.devices.ip.address/system_log,並在事件發生時將事件顯示爲Web瀏覽器窗口中的文本。然後人們可以使用它作爲一種快速的方式來監視系統正在做什麼,而不需要運行任何特殊的軟件。如何在Web瀏覽器中實現日誌窗口?

我的問題是,實現這個的最好方法是什麼?我已經嘗試了明顯的方法 - 只需讓我的設備的嵌入式Web服務器持續打開HTTP/TCP連接,並在發生事件時將必要的文本寫入TCP套接字 - 但問題在於大多數Web瀏覽器(例如Safari)在服務器關閉之前不顯示網頁,TCP連接已關閉,因此結果是日誌數據永遠不會出現在Web瀏覽器中,它就像頁面永遠持續到加載。

是否有一些技巧可以使這項工作?我可以實現它作爲一個Java小程序,但我更喜歡更輕量級/簡單的東西,或者只使用HTML或可能使用HTML + JavaScript。此外,我想避免讓Web瀏覽器「查詢」服務器,因爲這會引起太多延遲(如果重新載入延遲很大)或將負載放在系統上(如果延遲很小)

回答

0

好吧,既然你說你是願意做它在javascript:

  • 讓你的過程中不斷寫,而不關閉連接
  • 在客戶端(瀏覽器)使用xmlhttpobject和監視就緒狀態。

    0 =未初始化 1 =裝載 2 =加載 3 =交互 4 =完全

明顯3,4你以後找什麼。當你得到輸出時,你所要做的就是將responseText寫入一個div,然後設置好。查看here的xmlhttpobject屬性和用法。

1

如果你不想使用輪詢,那麼你完全或多或少的將日誌查看器完全寫在瀏覽器之外。但是,編寫輪詢方法非常簡單,它可以很好地減少延遲和系統負載(正如您提到的擔心一樣)。

這個技巧是使用Comet,這本質上是Ajax +長輪詢。

0

因爲現在這已經很老了。你可以使用網絡套接字來做這件事