2011-05-09 102 views
1

我有一個後端在Python中實現,應該將數據流傳輸到JavaScript創建表示的Web瀏覽器(例如不斷更新變量或繪圖到<canvas>)。HTTP數據流

該數據將以高達100 Hz的速率更新(甚至可能是1000 Hz時的最壞情況......),每個數據可能有10-20個字節。我想,使用COMET模式的第一個想法會產生太多的開銷。

我的下一個猜測是WebSockets。他們會非常合適 - 但在Firefox中被禁用會讓他們無法使用。

那麼在這種情況下你的建議是什麼?

(要求:。在Python在純JavaScript一些現代瀏覽器中運行,無需Flash或Java允許後端已經使用的lib是jQuery的實現應該很容易,最好使用輕量級庫。)

+0

可以在大約啓用的WebSockets在Firefox。這是一種可接受的解決方案,還是需要在「開箱即用」工作? – 2011-05-09 20:43:07

+1

當顯示器的刷新頻率可能只有100Hz時,爲什麼還要每秒刷新1000次?你不能每秒投票40-60次,並且這樣做嗎? – 2011-05-09 20:56:36

+0

@Mike:它必須是最終用戶的能力。這是一個選項,我告訴他使用一個現代瀏覽器(應該有至少3個選擇) - 但它不是一個選項,他不得不改變一個「祕密設置」,特別是出於安全原因的那個。 – Chris 2011-05-10 12:51:29

回答

1

解決方案我現在要做的是使用COMET模式並傳輸自上次請求以來在後端排隊的所有數據。因此,在數據生成速度慢的時候( - > COMET),我不會進行輪詢,而只有前端(即瀏覽器)可以在創建它們時處理這些連接。

由於每個請求都包含一些數據點,所以開銷會降低。 (你甚至可以說根據數據速率動態縮放開銷,隨着數據速率的提高,開銷下降......)

0

作爲這個問題的更新,現在你應該可以使用服務器發送的事件。我沒有使用XHR,因爲它將整個響應保存在內存中,並且沒有使用websocket,因爲我不需要雙工通信。我有幾乎同樣的問題,這裏的答案是:配置面板:

How to process streaming HTTP GET data?