官术网_书友最值得收藏!

2.1 Socket編程

Socket也叫“套接字”,是計算機網(wǎng)絡(luò)通信中最基礎(chǔ)的內(nèi)容,它通過對TCP/IP協(xié)議的封裝提供了在不同主機之間進行通信的功能。當訪問一個網(wǎng)站時,瀏覽器會打開一個套接字,通過套接字建立與服務(wù)器之間的鏈接,鏈接建立成功后服務(wù)器提供對訪問的響應(yīng)并返回訪問內(nèi)容,瀏覽器接收響應(yīng)并顯示。

幾乎所有Web應(yīng)用都是通過Socket實現(xiàn)的。一個網(wǎng)站本質(zhì)上就是Socket服務(wù)端和客戶端之間的通信,Web服務(wù)器就是服務(wù)端,用戶瀏覽器就是客戶端。用戶訪問網(wǎng)站的過程就是服務(wù)端與客戶端Socket通信的過程,如下圖所示。

下面的程序是一個簡單的Socket Web服務(wù)器。運行程序,通過瀏覽器訪問http://127.0.0.1:8000/,就會打開一個“Hello,World!”的頁面。

瀏覽器訪問效果如下圖所示。

這就是所有網(wǎng)站的實現(xiàn)原理:接收HTTP請求,解析HTTP請求,發(fā)送HTTP響應(yīng)。如果這些工作都由網(wǎng)站開發(fā)人員來做,那么開發(fā)人員不僅需要熟悉自身產(chǎn)品相關(guān)的技術(shù),而且需要學習HTTP協(xié)議、TCP/IP協(xié)議等協(xié)議,這會帶來很多額外的工作量。幸運的是,這些工作已經(jīng)有人幫我們完成了,在Python中這個工作由WSGI接口實現(xiàn),而Django是基于WSGI接口的。

當訪問同一個網(wǎng)站時,如果輸入的URL不同,網(wǎng)頁顯示的內(nèi)容也不同,這就是一般Web框架所實現(xiàn)的。接下來開發(fā)一個可以根據(jù)用戶輸入URL的不同而顯示不同頁面信息的Web框架。這個框架暫時可以接收兩個地址:index和detail,如果輸入其他地址則返回404錯誤,具體代碼如下:

執(zhí)行腳本,然后分別訪問index、detail和home頁面(注意,在代碼中并沒有處理home請求),瀏覽器顯示效果如下面三幅圖所示。

可以看到,由于在這個Web框架中處理了index請求(if url == '/index':)和detail請求(elif url =='/detail'),因此訪問這兩個頁面時網(wǎng)頁能夠正常顯示;對于其他請求統(tǒng)一按照404的方式進行處理,訪問home頁面時拋出404頁面。

雖然這個Web框架看起來非常簡單,但是事實上很多開發(fā)框架都是這樣在WSGI基礎(chǔ)上開發(fā)的,只是不同的框架提供了不同的功能而已。如果你感興趣,可以嘗試自己開發(fā)一個Web框架。

主站蜘蛛池模板: 嘉祥县| 滨海县| 涟源市| 怀化市| 徐水县| 会昌县| 新津县| 海原县| 巨鹿县| 新民市| 安图县| 白城市| 鹤壁市| 布拖县| 吉首市| 高碑店市| 凉城县| 集安市| 银川市| 祁连县| 玉林市| 吉安市| 酉阳| 富民县| 澄城县| 华容县| 炎陵县| 昔阳县| 福贡县| 景泰县| 四会市| 玉田县| 辰溪县| 达孜县| 鄂托克旗| 桃园县| 云梦县| 祥云县| 兰西县| 丰都县| 白银市|