国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python自帶的http模塊詳解

2020-02-23 01:41:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

挺久沒(méi)寫(xiě)博客了,因?yàn)椴┲鏖_(kāi)始了今年另一段美好的實(shí)習(xí)經(jīng)歷,學(xué)習(xí)加做項(xiàng)目,時(shí)間已排滿;很感謝今年這兩段經(jīng)歷,讓我接觸了golang和python,學(xué)習(xí)不同語(yǔ)言,可以跳出之前學(xué)習(xí)c/c++思維的限制,學(xué)習(xí)golang和python的優(yōu)秀特性以及了解在不同的場(chǎng)景,適用不同的語(yǔ)言;而之前學(xué)習(xí)linux和c/c++,也使我很快就上手golang和python;

我學(xué)習(xí)的習(xí)慣,除了學(xué)習(xí)如何使用,還喜歡研究源碼,學(xué)習(xí)運(yùn)行機(jī)制,這樣用起來(lái)才會(huì)得心應(yīng)手或者說(shuō),使用這些語(yǔ)言或框架,就和平時(shí)吃飯睡覺(jué)一樣,非常自然;因?yàn)樽罱薪佑|到bottle和flask web框架,所以想看下這兩個(gè)的源碼,但是這兩個(gè)框架是基于python自帶的http,因此就有了這篇文章;

python http簡(jiǎn)單例子

python http框架主要有server和handler組成,server主要是用于建立網(wǎng)絡(luò)模型,例如利用epoll監(jiān)聽(tīng)socket;handler用于處理各個(gè)就緒的socket;先來(lái)看下python http簡(jiǎn)單的使用:

import sysfrom http.server import HTTPServer,SimpleHTTPRequestHandlerServerClass = HTTPServerHandlerClass = SimpleHTTPRequestHandlerif__name__ =='__main__': port = int(sys.argv[2]) server_address = (sys.argv[1],port) httpd = ServerClass(server_address,HandlerClass)sa=httpd.socket.getsockname()print("Serving HTTP on",sa[0],"port",sa[1],"...")try: httpd.serve_forever() except KeyboardInterrupt:print("/nKeyboard interrupt received, exiting.") httpd.server_close() sys.exit(0)

運(yùn)行上述例子,可以得到如下:

python3 myhttp.py 127.0.0.1 9999

此時(shí)如果在當(dāng)前文件夾新建一個(gè)index.html文件,就可以通過(guò) http://127.0.0.1:9999/index.html 訪問(wèn)了index.html頁(yè)面了。

這個(gè)例子的server類(lèi)用的是HTTPServer,handler類(lèi)是SimpleHTTPRequestHandler,因此當(dāng)HTTPServer監(jiān)聽(tīng)到有request到來(lái)時(shí),就把這個(gè)request丟給SimpleHTTPRequestHandler類(lèi)求處理;ok,了解這些之后,我們開(kāi)始分別分析下server和handler.

http之server

http模塊的設(shè)計(jì)充分利用了面向?qū)ο蟮睦^承多態(tài),因?yàn)橹坝锌戳藭?huì)tfs文件系統(tǒng)的代碼,所以再看python http時(shí),沒(méi)那么大的壓力;先給出server的繼承關(guān)系

 +------------------++------------+| tcpserver基類(lèi) || BaseServer +-------->| 開(kāi)啟事件循環(huán)監(jiān)聽(tīng) |+-----+------+ | 處理客戶端請(qǐng)求 | | +------------------+ v +-----------------++------------+| httpserver基類(lèi) || TCPServer +-------->+設(shè)置監(jiān)聽(tīng)socket |+-----+------+ | 開(kāi)啟監(jiān)聽(tīng) | | +-----------------+ v+------------+| HTTPServer | +------------+

繼承關(guān)系如上圖所示,其中BaseServer和TCPServer在文件socketserver.py,HTTPServer在http/server.py;我們先看下來(lái)BaseServer;

BaseServer

因?yàn)锽aseServer是所有server的基類(lèi),因此BaseServer盡可能抽象出所有server的共性,例如開(kāi)啟事件監(jiān)聽(tīng)循環(huán),這就是每個(gè)server的共性,因此這也是BaseServer主要做的使;我們來(lái)看下BaseServer主要代碼部分

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岗巴县| 沙坪坝区| 阳信县| 林周县| 安陆市| 长岭县| 佛教| 那曲县| 常熟市| 香河县| 即墨市| 嘉兴市| 新营市| 克什克腾旗| 阳谷县| 隆安县| 临沭县| 平顶山市| 龙海市| 屏边| 武夷山市| 聂拉木县| 望谟县| 嘉兴市| 孟连| 黄浦区| 中江县| 平安县| 道真| 云林县| 乌鲁木齐市| 鄂托克旗| 庆元县| 永胜县| 金堂县| 增城市| 太保市| 深泽县| 太保市| 仁布县| 中江县|