我想使用ajax編寫聊天應用程序。所以我需要每100毫秒(0.1秒)檢查一次數據庫中的用戶消息表。是否有任何問題,如果我使用setTimeOut每100毫秒調用ajax?任何性能問題?任何陷阱或任何東西?使用setTimeOut進行Ajax調用
回答
這是一個非常糟糕的主意。雖然它可能適用於本地計算機和少數用戶,但無法輕鬆擴展到更多用戶。我建議你看看websockets和長時間的投票。
你建議長輪詢,所以你可以建議任何例子..?按照我所知,長時間輪詢可以使用setTimeout來實現......對。 – 2013-03-25 06:44:49
@DipeshParmar長輪詢和常規輪詢之間的區別在於,您可以防止您的請求超時,並且服務器在需要時進行響應。您只在前一個過期或完成時發出新請求。您不一定會使用setTimeout,因爲當您發送下一個請求時,取決於服務器響應的時間。 – 2013-03-25 06:46:11
@DipeshParmar發送多個請求只是在短時間間隔內頻繁發生多個請求,而不是長時間輪詢。長輪詢本質上意味着服務器不會寫任何響應,並且在請求有任何數據寫入之前(或者直到請求超時,這可能比幾秒鐘更長的時間)。只有當前請求過期或當前請求獲得數據響應時,客戶端纔會發出新請求。 – Munim 2013-03-25 06:51:37
更好的選擇是使用Socket.IO
。它使這項任務輕鬆了許多
Socket.IO使得跨瀏覽器解決方案
服務器例如:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
客戶端(瀏覽器):
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
編輯:
對於PHP,phpwebsocket類將是一個不錯的選擇以及客戶端jquery plugin
這是一個很好的建議,我自己是node.js開發人員,但問題是標記爲asp.net和php。是否asp。網有什麼類似websocket的解決方案? – Munim 2013-03-25 06:48:15
@Munim IIS7不支持它,但IIS8會。我相信PHP中的網絡套接字目前是可能的。 – 2013-03-25 06:50:11
我是asp.net開發人員。我如何在asp.net中使用這個? – 2013-03-25 06:52:33
的JavaScript知道兩類定時器:的setInterval和setTimeout的。 setInterval每隔100毫秒觸發一次,setTimeOut在前一次觸發100毫秒後調用下一個。在調整應用程序時,應該牢記這一行爲。你也可以考慮網絡工作者,他們真的在單獨的線程上工作。他們溝通以消息爲基礎,這聽起來是適合您問題的解決方案。確切的延遲(100毫秒或更長)是您真正需要嘗試的。 John Resig的書顯示,從21ms(IE9)到1ms(Opera),各種瀏覽器的實時定時器延時差異很大。
- 1. 使用setTimeout定期進行自動完成AJAX調用?
- 2. 使用的setTimeout與Ajax調用
- 3. setTimeout在jQuery中調用ajax
- 4. 使用JQuery進行Ajax調用?
- 5. 使用React進行Ajax調用
- 6. 使用JQuery進行跨域Ajax調用
- 7. 無法使用jQuery進行Ajax調用
- 8. 使用Q和jQuery進行Ajax調用
- 9. 無法使用jQuery進行Ajax調用
- 10. 使用YUI進行JavaScript Ajax調用
- 11. 使用jQuery進行Ajax調用
- 12. JSF使用jQuery Mobile進行Ajax調用
- 13. 使用Google Closure進行Ajax調用
- 14. 使用cljs-ajax進行異步調用
- 15. 使用jquery進行AJAX後調用?
- 16. 使用jQuery和Ajax的setTimeout行爲
- 17. 從javascript進行Ajax調用
- 18. AJAX Webworker使用setTimeout輪詢
- 19. 替代使用setTimeout和AJAX?
- 20. 使用SetTimeout進行JavaScript Canvas動畫()
- 21. 調用使用setTimeout的
- 22. 在ASP.NET Web Forms中使用$ .ajax進行ajax調用
- 23. 如何用純javascript進行AJAX調用?
- 24. 從子進程調用setTimeout(NodeJS)
- 25. 使用AJAX進行驗證
- 26. 使用Ajax進行乘法
- 27. 使用python進行跨域調用並使ajax調用python來讀取數據
- 28. 無法進行調用Ajax和PHP
- 29. 防止CascadingDropDown進行初始AJAX調用
- 30. ASP.net與Jquery進行AJAX調用
沒有任何問題,但只是確保你的ajax和後端能夠發送迴應內或小於90milisecond ... – 2013-03-25 06:40:08
我怎麼可以確保這一點? – 2013-03-25 06:42:45
使用firebug firefox add就可以顯示響應時間和內容......也可以使用yslow firefox addon查看哪個響應延遲... – 2013-03-25 06:43:55