我想了解Web服務器如何處理大量的同時HTTP請求和響應。請記住我是網絡編程的新手。端口80上的HTTP通信
Web服務器可以同時在端口80上發送多個HTTP響應嗎?或者答案必須是「序列化」的?
Web服務器是否以序列化方式接收請求?如果是這樣,那麼插入優先級隊列可能需要很快。
我想了解Web服務器如何處理大量的同時HTTP請求和響應。請記住我是網絡編程的新手。端口80上的HTTP通信
Web服務器可以同時在端口80上發送多個HTTP響應嗎?或者答案必須是「序列化」的?
Web服務器是否以序列化方式接收請求?如果是這樣,那麼插入優先級隊列可能需要很快。
簡短的回答是,大多數Web服務器將通過在單獨的線程/進程(通過從線程池拉線程或創建新線程)處理每個請求來並行處理傳入的請求。通常,可以同時處理的請求數量有限制(例如線程池中的最大線程數)。超出該上限意味着掛起的請求將在隊列中等待,直到另一個請求結束。如果服務器需要對請求進行一些異步處理,它可能會將線程返回到線程池,直到它準備好完成請求(例如使用ASP.NET中的IHttpAsyncHandler)。
服務器實際上沒有發回端口80上的請求。客戶端將擁有自己的端口用於該特定連接。
我是新手,但對網絡通信有一點了解。
它不會同時響應多個請求,一次一個,正常運行時非常非常快。
當通過網絡發送信息時,無論端口是什麼端口,都會通過數據包發送出去。 在那個數據包中,頭文件定義了你的問題,你詢問的是它正試圖使用的端口號以及其他需要的信息。 標題後是數據。數據包中的數據大小因設置而異,例如計算機,路由器/交換機以及其他涉及的其他數據。 然後最後是腳註,其中包含關於它是否是針對該特定註冊的最後數據包的指示,或者如果不是,則指示下一個數據包中要查找的內容。
希望有助於回答你的問題,也許會給你更多的問題。
epoll會成爲IHttpAsyncHandler在ASP.NET中的等價物嗎? – SundayMonday 2011-12-15 19:20:14
@MrMusic雖然我不是Linux網絡的專家,但我相信epoll更類似於Windows中的I/O完成端口。 Web服務器(如Apache或IIS)將使用epoll或I/O完成端口異步地從網絡套接字讀取數據。通常,在Web服務器中運行應用程序模型(例如Apache中的PHP模塊或IIS中的ASP.NET)。某些應用程序模型允許您在處理服務器請求時將線程「釋放」回線程池。 Node.js是一個服務器的例子,它試圖以異步方式處理所有事情。 – 2011-12-16 21:43:11