2011-07-20 37 views
3

我對財務數據如何從服務器傳輸到客戶端非常感興趣。我經常在這裏使用「推拉」這個術語。我想知道是否有人可以給我一個例子(最好是在Java,C#或Javascript),這是如何實現的?每當我在家裏編寫愛好業餘愛好項目時,即使價格沒有變化,我通常最終還是會查詢一個URL(包含價格),並在一段時間(true)循環內連續調用此函數,並使用thread.sleep(x)。服務器 - 客戶端推/拉連接如何工作?

在此先感謝

+0

[財務頁面如何更新自己](http://stackoverflow.com/questions/6759192/how-do-pages-like-yahoo-finance-update-page-without-plugins-etc-http-push/ 6759218#6759218) – Raynos

回答

3

不知道你的意思與「流財務數據」是什麼,但推/拉的概念並不侷限於金融領域:)

一般來說,拉動戰略意味着客戶端主動獲取數據通過一個預定義的通信通道(在你的情況下是一個套接字到現有的和已知的URL)並輪詢這個通道以獲得新的信息。

與此相反,您有推送策略,您可以在其中通知您有任何更改,並提供通信通道並將其註冊到連接的夥伴。例如。您有一個web服務,並且您的連接夥伴將在他認爲合適的時候將信息發佈到該web服務。對於這個概念見http://en.wikipedia.org/wiki/Observer_pattern

希望這會有所幫助。

0

你在做拉。 Pulling是當客戶端從服務器請求數據並且服務器根據該請求進行操作時。

如果服務器在收到新數據後會發送數據,那應該是push

所以區別在於:push是由服務器發起的,pull是由客戶端發起的。

財務數據通常使用軟件如進行傳輸。發佈者將消息發送到守護程序和偵聽器,該守護程序訂閱該主題從守護程序獲取消息。

2

如果客戶端通過HTTP工作,推送始終由客戶端發起,即客戶端請求新的更新並且服務器發送它們。如果客戶端是瘦客戶端(即應用程序在瀏覽器中運行),現代的方法是使用AJAX檢索數據而不刷新頁面。但是,這一舉措又是在客戶端,但用戶卻沒有看到它。它使用javascript在計劃的基礎上完成。

最「實時」的方法是使用HTTP隧道技術:客戶端執行HTTP GET到特殊的URL映射到servlet不關閉連接。它只是把它打開。當它有東西發送到客戶端時,它會寫入流中。因此,您可以獲得服務器到客戶端的推送,但仍然由客戶端執行初始連接。

+0

Websockets和eventsource是實時的。 – Raynos

+0

嗨,那裏是否有這個服務器到客戶端HTTP GET方法的名稱?謝謝 – Jean

0

這是兩個基於Web的PUSH技術。

至於瀏覽器支持:

  • 鉻/ Safari瀏覽器/ Firefox6支持兩個。
  • Opera支持EventSource和Websockets,但默認禁用後者。
  • Firefox 4支持websockets,但默認禁用它。
  • IE < 10既不支持,IE10可能,如果一個支持你的幸運

有許多拉技術,包括HTTP和Ajax。

+0

謝謝(我試過回覆你的第一條評論,但它不起作用) – Jean

+0

有沒有Java或C#PUSH技術? – Jean

+0

@David他們是Java或C#你只需要實現服務器。 Google for .NET WebSocket或Java Websocket。有完全的語言nuetral – Raynos

相關問題