程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Socket實現簡單Web服務器,socketweb服務器

Socket實現簡單Web服務器,socketweb服務器

編輯:C#入門知識

Socket實現簡單Web服務器,socketweb服務器


      上一篇博客中介紹了怎樣使用socket訪問web服務器。關鍵有兩個:

1)熟悉Socket編程;

2)熟悉HTTP協議。

上一篇主要是通過socket來模擬浏覽器向(任何)Web服務器發送(HTTP)請求,重點在浏覽器端。本篇博客則反過來講一下怎樣使用socket來實現Web服務器,怎樣去接收、分析、處理最後回復來自浏覽器的HTTP請求。

      HTTP協議是浏覽器和Web服務器都需要遵守的一種通信規范,如果我們編寫一個程序,正確遵守了HTTP協議,那麼理論上講,這個程序可以具備浏覽器、甚至Web服務器的功能。

圖1

如上圖1所示,Web服務器和浏覽器之間無論是發送數據還是接收(解析)數據均遵守了HTTP協議。可以很確定地講,只要我們充分熟悉HTTP協議結構,那麼無論浏覽器的實現還是Web服務器的實現,均只是“簡單的”Socket程序的開發過程,除此之外,無其它神秘高深的東西。而Socket程序開發,稍微知道一點socket的有關知識,均能寫得出一個大概demo。

      從系統架構來講,Web架構形式的系統均符合“生產者-消費者”模式(實質上,現實生活中大部分系統均屬於該模式)。浏覽器端不斷產生數據(請求),而Web服務器端不斷處理請求,長時間持續如此。

圖2

如上圖2所示,圖中左邊部分為Web服務器中的“泵”結構,所謂泵,就是指它能夠持續長時間循環運作。圖中右邊顯示“來自浏覽器請求”部分即為“生產者”,生產者不斷發出請求,由左邊(Web服務器)不斷進行處理,最後回復給浏覽器。注意圖2中顯示,Web服務器中處理數據在循環體內部,換句話說,前一次HTTP請求處理結束之前,後一次HTTP請求不能開始,也就是每次請求處理均會阻塞循環的執行。這種串行處理數據的方式明顯效率不高,為了解決該問題,我們可以在接收到浏覽器端的HTTP請求後,並不馬上在當前線程中進行處理,而是開辟獨立線程來處理請求(在.NET中可以使用異步編程實現)。這樣一來,請求處理並不會阻塞當前循環過程,見下圖3

圖3

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved