問題的簡短版本: 我需要向用戶顯示進程的進度。我很樂意使用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?
我一直在讀這篇文章,並沒有太多的安裝文檔。現在我已經聽說過node.js,但之前只有現在的HTML5瀏覽器,但是我在帖子中看到node.js使用socket.io。那麼我應該使用node.js嗎?在socket.io上,安裝說明似乎適用於UNIX。我在Windows上。這是另一個服務或網絡服務器,與Apache一起運行嗎?我認爲這些東西只是我添加到當前應用程序的JavaScript代碼,但似乎必須安裝某些東西。我會再讀一些,只是沒有點擊。 – gfrobenius
你必須使用某種網絡服務器。將Apache用於諸如將更新從服務器推送到瀏覽器這樣的東西並不是一個好主意,因此許多開發人員正在將其遷移到其他Web服務器,如NodeJS。如果你真的想開始異步編程,你應該考慮切換;) –
在你的情況下,我建議只使用長輪詢,如果你真的使用冷聚變,可能[that](http://www.bennadel.com /blog/1976-Long-Polling-Experiment-With-jQuery-And-ColdFusion.htm)作品 –