2014-01-21 88 views
0

問題的簡短版本: 我需要向用戶顯示進程的進度。我很樂意使用WebSockets,但我必須一直支持IE8。由於我不能使用WebSockets,我堅持使用JavaScript setTimeout並做了ping?有沒有我還沒有聽說過的新技術?我正在尋找一種解決方案(不是一個詳細的解決方案,只是一種我沒有聽說過的技術或技術的名稱,如果有的話)不涉及太多的網絡流量。最小網絡流量的進度條

長版本: 我的應用程序中有一些進度條。他們通過執行$.post來開始某個過程。這個過程是它的工作,一路上它設置了幾個會話變量,說明它的進展,記錄進程,文件大小等等......在初始$.post之後立即啓動一個「心跳」或「ping」進程並獲取這些進程會話變量以顯示用戶%完成,記錄進程和當前文件大小。它每隔1/2秒觸發一次,因此用戶可以平穩看到進度條增量,處理的記錄數量平穩增加,他們可以實時查看生成的PDF的大小。它一直在工作很多年。 ping過程的前端看起來像這樣...

function rptCheckProgress(id) 
{ 
    jQuery.ajax({ 
     async:false, 
     cache:false, 
     url: 'rpt.cfc?method=rptCheckProgress&rptId='+id, 
     success: function(data) 
     { 
      jQuery('#libRptProgress').html(data); 
      if (!gStopHeartBeat) setTimeout("rptCheckProgress("+id+");", 500); 
     } 
    }); 
} 

現在我必須實現更多這種需要「ping」才能顯示進度的場景。我真的很討厭這麼做,尤其是因爲我們的軟件使用的網絡非常慢,但我不知道另一種方式。我很樂意使用WebSockets,但我必須一直支持IE8。由於我不能使用WebSockets,我堅持使用JavaScript setTimeout並做了ping?

回答

2

使用socket.io,它儘可能使用WebSockets,但可以回退到長輪詢。如果您不想使用socket.io,請直接使用長輪詢。

+0

我一直在讀這篇文章,並沒有太多的安裝文檔。現在我已經聽說過node.js,但之前只有現在的HTML5瀏覽器,但是我在帖子中看到node.js使用socket.io。那麼我應該使用node.js嗎?在socket.io上,安裝說明似乎適用於UNIX。我在Windows上。這是另一個服務或網絡服務器,與Apache一起運行嗎?我認爲這些東西只是我添加到當前應用程序的JavaScript代碼,但似乎必須安裝某些東西。我會再讀一些,只是沒有點擊。 – gfrobenius

+0

你必須使用某種網絡服務器。將Apache用於諸如將更新從服務器推送到瀏覽器這樣的東西並不是一個好主意,因此許多開發人員正在將其遷移到其他Web服務器,如NodeJS。如果你真的想開始異步編程,你應該考慮切換;) –

+0

在你的情況下,我建議只使用長輪詢,如果你真的使用冷聚變,可能[that](http://www.bennadel.com /blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm)作品 –

1

ColdFusion的Websockets的實現也有所回落。我相信它回落在Flash上​​......這意味着它不會覆蓋所有設備,比如socket.io聲稱要做的事情。

我聽說過有關ColdFusion的Websockets的好處,它沒有像CFFORM等那樣出現,但通常在JS中自己做這件事有時是最好的選擇。 我聽說過socket.io,但我不知道這一點。

我不會試圖重新發明輪子,WebSockets是爲此設計的,所以利用它們的回退可以爲您提供最新的瀏覽器上的最佳場景,以及針對IE8等瀏覽器的傳統長輪詢需要它。

根據您的需求,其中一個應該可以幫助您解決問題。

+0

謝謝。我看到這個警告雖然(這是相當新的)我不能編碼到CF10,但要麼導致政府延遲sooo faaarrrr beeeehhhiinnnnnndddddddd:/但我不知道這個新的websocket標籤,謝謝讓我知道它。也許10年後,我們的客戶會讓我使用它:) jk – gfrobenius

+0

這是爲了應對安全問題。 Adobe在現場就是johnny,並在不久之後實際發佈了一個錯誤修復程序。這是關於社區參與如何強制Adobes手的一個觀點和案例。它現在正確地修補,這不是一個問題。亞當卡梅隆有一個後續博客證實了這一點。我會盡量找到它。 –