可以用ajax來實現真正的多線程嗎?如果可以,怎麼辦? 請給我一些相關的信息,網站或書籍。 謝謝〜!ajax多線程
ajax多線程
回答
這取決於你的意思是「多線程」。
Javascript代碼明顯是單線程的。沒有Javascript代碼會中斷當前在同一頁面上執行的其他Javascript代碼。 AJAX(XHR)請求會觸發瀏覽器做一些事情,並且(通常)在完成時調用回調。
在服務器上,每個Ajax請求都是一個單獨的HTTP請求。這些將在他們自己的線程上執行。根據Web服務器配置的不同,它們甚至可能不在同一臺計算機上執行。但是,即使調用相同的腳本,每個PHP腳本實例也將完全分離。本身沒有共享狀態。
現在,瀏覽器通常會限制頁面在每個主機的基礎上同時發生的Ajax請求的數量。這個數字通常是2.我相信你可以改變它,但是因爲大多數人會有默認值,所以你必須假設它是2.更多的請求將會排隊,直到現有的請求完成。這可能導致必須做煩人的事情,如創建多個主機名稱,如req1.example.com,req2.example.com等。
一個例外是會話,但它們不是多線程。開始一個會話將阻止所有其他腳本嘗試啓動完全相同的會話(基於cookie)。這就是爲什麼您需要儘量減少會話打開時間的一個原因。可以說,你可以使用數據庫或類似memcache的東西來克服腳本間的通信,但它並不是真正的PHP。
PHP最適合用於簡單的請求處理。收到請求。它被處理並返回一個響應。該響應可能是HTML,XML,文本,JSON或其他。該請求可能是來自瀏覽器的HTTP請求或AJAX請求。
在可能的情況下,這些請求 - 響應週期中的每一個應被視爲單獨的實體。
另一種使用的技術是長輪詢。 HTTP請求被髮送到服務器,並且可能不會很長時間返回。這用於基於Web的聊天和其他「服務器推送」類型的場景。有時部分回覆將被刷新而不結束請求。
最後一個選項(至少在Unix/Linux上)是PHP可以產生進程,但這似乎不是你所指的。
那你究竟在做什麼?
實際上你不能多線程,但是很多大型網站做的是刷新頁面的輸出,然後使用Ajax來實時加載其他組件,以便用戶在瀏覽器仍然可以看到內容時請求新的信息。它是一種很好的技術,但是和其他一切一樣,你需要小心如何使用它。
- 1. java多線程ajax更新
- 2. 針對PHP的多線程ajax調用
- 3. ASP.NET和AJAX線程
- 4. 多線程線程控制
- 5. Java線程(多線程)
- 6. 單線程C多線程#
- 7. 多線程vs單線程
- 8. 多線程 - 等待線程
- 9. 關於多線程的java多線程
- 10. java中有多線程的多線程
- 11. 多線程DLL(/ MD)vs多線程(/ MT)
- 12. java編程和java單線程多線程問題(單線程與多線程)
- 13. 重構多線程類爲單線程+多線程
- 14. 多線程和多
- 15. Python的多功能多線程與線程。線程? (可變線程數)
- 16. 多線程程序
- 17. 多線程編程
- 18. SurfaceView多線程
- 19. 多線程Haskell
- 20. 多線程DBMS?
- 21. VB.NET多線程
- 22. fedora多線程
- 23. ç多線程
- 24. 多線程WPF
- 25. Boost多線程
- 26. Java多線程
- 27. 多線程FILESTREAM
- 28. gSOAP多線程
- 29. 與多線程
- 30. 多線程WScript.Shell.run
也許他是在假設一個人必須等待ajax請求完成而另一個才能被解僱?如果是這樣,如果一個函數依次觸發5個Ajax請求,它將不會等待請求之一在處理第二個請求之前回來。如上所述,它不會在_exact_同時發射全部5個,但它們都將在相互間的幾毫秒內運行(通常爲 – 2010-05-26 15:18:42
)這是一個很好的答案,但值得注意的是,大多數瀏覽器將限制您的請求數量可以發送兩個(雖然這可以在瀏覽器設置中更改),並將其餘的排隊,所以您可能無法從並行請求中獲得顯着的加速。 – 2010-05-26 15:34:40
@丹哦,我的意思是把它放進去,但忘記了。感謝您提出。 – cletus 2010-05-26 21:44:17