2012-02-04 69 views
3

開發Web服務器有哪些不同的方法?所以我想有(1)多線程(2)事件循環,還有什麼?每種方法的優缺點是什麼?你什麼時候使用每個?你能列出每個方案的特定impl嗎?開發Web服務器有哪些不同的方法?

回答

0

你應該添加非阻塞I/O。看看Netty

+1

(通常)event-loop和nio會聚在一起... – DuduAlul 2012-02-04 17:46:23

4

不同的方法可以是:

  1. 單線程:所有連接都通過單個線程 「監聽」並等待連接和流程requests.It 很容易實現,但它是處理最沒用的服務器,因爲它可以 一次只能

  2. 多線程服務請求:服務器監聽請求和每個傳入 請求被分配到一個新的線程來處理it.So每個客戶 連接由其專用線程處理。這種方法(不像 1)支持客戶端請求的併發處理,但不 規模以及因爲每個新創建的請求在服務器 一個新的線程,這需要很多resources.Eventually的服務器將達到一個極限

  3. 多線程池:與(2)相同,但不是創建新的線程來處理每個傳入的請求,而是使用線程池 中的線程。線程被創建並放置在一個池中用於以後的重用。這種擴展能夠很好地支持多個客戶端請求,並且它是標準的方法。 Tomcat是這樣工作的。

  4. 事件隊列:每個傳入的請求被放入一個隊列中,並由後臺線程處理,後臺線程處理隊列的請求。它是 非阻塞,這種類型的異步處理也很好地規模爲 。老實說,我不知道它是否比(3)在 performance(3)好。我認爲可以使用 NIO體系結構

0

一些服務器,例如G-WAN混合多線程,池事件隊列,讓服務器飽和CPU內核與每個線程處理許多連接。

Disclamer:我參與了這個項目的開發。

相關問題