用Python指令碼定製自己的Web伺服器

2021-09-03 07:24:29 字數 2952 閱讀 9030

標題很巨集偉,實現很遙遠。

首先要說明這其實是乙個不可能完成的任務,至少不是一片博文就能完成的任務。避免浪費看到標題而滿心期待同道的時間。

主要是想以apache為藍本,通過python指令碼的方式一步一步實現apache的核心功能。進而了解python網路程式設計以及有關於web服務效能相關的方方面面。

閒言少敘,直接上**!

import socket

server=socket.socket(socket.af_inet,socket.sock_stream)

server.bind(('',1234))

server.listen(5)

while true:

client,addr=server.accept()

data=client.recv(1024)

client.send("my webserver")

client.close()

使用ab命令對這個伺服器進行測試:

ab -n500 -c500

測試結果如下:

通過列印data可以得到客戶端**提交到webserver的資訊。

我們在這裡只關心get請求的內容,通過解析使用者的get請求後獲取指定目錄中的檔案內容後再返回給客戶端。

import socket

import re

documentroot="/root/"

server=socket.socket(socket.af_inet,socket.sock_stream)

server.bind(('',1235))

server.listen(5)

while true:

client,addr=server.accept()

data=client.recv(1024)

m=re.match('get /(.*) ',data)#由於ab使用的是http1.0 因此與上例有所區別

try:

index=documentroot+m.group(1)

html=open(index,"r")

client.send(html.read())

client.close()

except:

client.close()

通過ab命令進行測試的結果如下:

事情並沒有如此簡單,大家都注意到了我們的網頁連1k都不到。在真實的生產環境中,網頁的大小一般都是50k以上。修改index.html檔案,複製5000行my webserver。

如圖所示,修改後的檔案大小是51k

我們的測試都是在本地伺服器上進行的,因此網路頻寬是被忽略的。因為我們的伺服器是單程序的。因此,如果有乙個使用者處理的比較慢,結果是不堪設想的。

增加多程序後的**如下:

可以通過ab命令的測試了。但測試結果:

讓python落敗的原因可以確認就是python的os.fork()的處理方式,與系統、網路i/o沒有直接的關係。

定製自己的CentOS

1 在 root 目錄下面 找到install.log 檔案並把在檔案中以 installing 開頭的行中的軟體包名剪下到另乙個檔案中,但是在該軟體中還有以數字開頭的軟體,且把該軟體包名也存到 如 建立乙個檔名為 package.txt 命令 touch package.txt 注用於存放 rpm...

自己定製SPS的顏色

自己定製sps的顏色 通過昨天的學習,我知道可以使用css來定製sps站點的顏色,我以前也試過通過在管理介面上設定新的css路徑來更改sps站點的顏色,可以沒有成功。現在,我明白是因為自己放css檔案的路徑不對。我從原來的目錄下拷貝了乙個ows.css檔案,重新命名為ows zy.css,然後拷貝到...

定製自己的android系統?

1 環境搭建 進入www.android.com 2 找到developer resource open source 3 當前歷史時間的連線,根據下面的downloading and building initializing the build environment 然後按照左邊的環境搭建就可...