91精产品自偷自偷综合官网版下载-91精产品自偷自偷综合下-91精品-91精品91久久久-91精品成人-91精品成人www

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

Python中怎么實(shí)現(xiàn)一個HTTP服務(wù)器

Python 中怎么實(shí)現(xiàn)一個HTTP 服務(wù)器,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),敦煌企業(yè)網(wǎng)站建設(shè),敦煌品牌網(wǎng)站建設(shè),網(wǎng)站定制,敦煌網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,敦煌網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1、WSGI

下面是第一段代碼,第一個參數(shù)是environ,用于接收一個字典,字典中提供的鍵值對是舊式的CGI環(huán)境集合的拓展。第二個參數(shù)本身也是可以被調(diào)用的,習(xí)慣上會將其命名為start_response(),WSGI應(yīng)用程序通過這個參數(shù)來聲明響應(yīng)頭信息。

# 用WSGI應(yīng)用形式編寫的簡單HTTP服務(wù)。 #!/usr/bin/env python3 # A simple HTTP service built directly against the low-level WSGI spec.  from pprint import pformat from wsgiref.simple_server import make_server  def app(environ, start_response):     headers = {'Content-Type': 'text/plain; charset=utf-8'}     start_response('200 OK', list(headers.items()))     yield 'Here is the WSGI environment:  '.encode('utf-8')     yield pformat(environ).encode('utf-8')  if __name__ == '__main__':     httpd = make_server('', 8000, app)     host, port = httpd.socket.getsockname()     print('Serving on', host, 'port', port)     httpd.serve_forever()

上述只是一個簡單的情況。但是在編寫服務(wù)器程序時,復(fù)雜度就大大提升了。這是因?yàn)橐耆紤]標(biāo)準(zhǔn)中的描述的許多注意點(diǎn)和邊界情況。

2、前向代理與反向代理

無論前向代理還是反向代理,HTTP代理其實(shí)就是一個HTTP服務(wù)器,用于接收請求,然后對接收到的請求(至少是部分請求)進(jìn)行轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)請求時代理會扮演客戶端的角色,將轉(zhuǎn)發(fā)的HTTP請求發(fā)送至真正的服務(wù)器,最后將從服務(wù)器接受到的響應(yīng)發(fā)揮扮演客戶端的角色,將轉(zhuǎn)發(fā)的請求發(fā)送至真正的服務(wù)器,最后將從服務(wù)器接受到的響應(yīng)發(fā)回給最初的客戶端。

下面是前向代理和反向代理的簡圖。

Python 中怎么實(shí)現(xiàn)一個HTTP 服務(wù)器

反向代理已經(jīng)廣泛應(yīng)用于大型的HTTP服務(wù)當(dāng)中。反向代理是Web服務(wù)的一部分,對于HTTP客戶端并不可見。

3、四種架構(gòu)

架構(gòu)師一般都使用很多種復(fù)雜的機(jī)制來將多個子模塊組合建成一個HTTP服務(wù)?,F(xiàn)在在Python社區(qū)中,已經(jīng)形成了4種基本的模式。如果已經(jīng)編寫了用于生成動態(tài)內(nèi)容的Python代碼,并且已經(jīng)選擇了某個支持WSGI的API或框架,應(yīng)該如何將HTTP服務(wù)部署到線上呢?

  • 運(yùn)行一個使用Python編寫的服務(wù)器,服務(wù)器的代碼中可以直接調(diào)用WSGI接口。現(xiàn)在流行的是Green  Unicorn(Gunicorn)服務(wù)器,不過也有其他已經(jīng)可以用于生產(chǎn)環(huán)境的純Python服務(wù)器。

  • 配置mod_wsgi并運(yùn)行Apache,在一個獨(dú)立的WSFIDaemonProcess中運(yùn)行Python代碼,由mod_wsgi啟動守護(hù)進(jìn)程。

  • 在后端運(yùn)行一個類似于Gunicorn的Python  HTTP服務(wù)器(或者支持所選異步框架的任何服務(wù)器),然后在前端運(yùn)行一個既能返回靜態(tài)文件,又能對Python編寫的動態(tài)資源服務(wù)進(jìn)行反向代理的Web服務(wù)器。

  • 在最前端運(yùn)行一個純粹的反向代理(如Varnish),在該反向代理后端運(yùn)行Apache或者nginx,在后端運(yùn)行Python編寫的HTTP服務(wù)器。這是一個三層的架構(gòu)。這些反向代理可以分布在不同的地理位置,這樣子就能夠?qū)㈦x客戶端最近的反向代理上的緩存資源返回給發(fā)送請求的客戶端。

Python 中怎么實(shí)現(xiàn)一個HTTP 服務(wù)器

長期以來,對這4個架構(gòu)的選擇主要基于CPython的3個運(yùn)行時的特性,即解釋器占用內(nèi)存大、解釋器運(yùn)行慢、全局解釋器(GIL,Global  Interpreter Lock)禁止多個線程同時運(yùn)行Python字節(jié)碼。但同時帶來了內(nèi)存中只能載入一定數(shù)量的Python實(shí)例。

4、平臺即服務(wù)

這個概念的出現(xiàn)是因?yàn)楝F(xiàn)在的自動化部署、持續(xù)集成以及高性能大規(guī)模服務(wù)的相關(guān)技術(shù)的出現(xiàn)和處理有一些繁雜。所以有一些提供商提出了PaaS(Platform as  a Service),現(xiàn)在只需關(guān)心應(yīng)該如何打包自己的應(yīng)用程序,以便將自己的應(yīng)用部署到這些服務(wù)之上。

PaaS提供商會解決構(gòu)建和運(yùn)行HTTP服務(wù)中的出現(xiàn)的各種煩心事。不需要再關(guān)心服務(wù)器,或者是提供IP地址之類的事情。

PaaS會根據(jù)客戶規(guī)模提供負(fù)載均衡器。只需要給PaaS提供商提供配置文件即可完成各種復(fù)雜的步驟。

現(xiàn)階段比較常用的有Heroku和Docker。

大多數(shù)PaaS提供商不支持靜態(tài)內(nèi)容,除非我們在Python應(yīng)用程序中實(shí)現(xiàn)了對靜態(tài)內(nèi)容的更多支持或者向容器中加入了Apache或ngnix。盡管我們可以將靜態(tài)資源和動態(tài)頁面的路徑放在兩個完全不同的URL空間內(nèi),但是許多架構(gòu)師還是傾向于將兩者放在同一個名字空間內(nèi)。

5、不使用Web框架編寫WSGI可調(diào)用對象

下面第一段代碼是用于返回當(dāng)前時間的原始WSGI可調(diào)用對象。

#!/usr/bin/env python3 # A simple HTTP service built directly against the low-level WSGI spec.  import time  def app(environ, start_response):     host = environ.get('HTTP_HOST', '127.0.0.1')     path = environ.get('PATH_INFO', '/')     if ':' in host:         host, port = host.split(':', 1)     if '?' in path:         path, query = path.split('?', 1)     headers = [('Content-Type', 'text/plain; charset=utf-8')]     if environ['REQUEST_METHOD'] != 'GET':         start_response('501 Not Implemented', headers)         yield b'501 Not Implemented'     elif host != '127.0.0.1' or path != '/':         start_response('404 Not Found', headers)         yield b'404 Not Found'     else:         start_response('200 OK', headers)         yield time.ctime().encode('ascii')

第一段比較冗長。下面使用第三方庫簡化原始WGSI的模式方法。

第一個示例是使用WebOb編寫的可調(diào)用對象返回當(dāng)前時間。

#!/usr/bin/env python3 # A WSGI callable built using webob.  import time, webob  def app(environ, start_response):     request = webob.Request(environ)     if environ['REQUEST_METHOD'] != 'GET':         response = webob.Response('501 Not Implemented', status=501)     elif request.domain != '127.0.0.1' or request.path != '/':         response = webob.Response('404 Not Found', status=404)     else:         response = webob.Response(time.ctime())     return response(environ, start_response) 第二個是使用Werkzeug編寫的WSGI可調(diào)用對象返回當(dāng)前時間。

第二個是使用Werkzeug編寫的WSGI可調(diào)用對象返回當(dāng)前時間。

#!/usr/bin/env python3 # A WSGI callable built using Werkzeug.  import time from werkzeug.wrappers import Request, Response  @Request.application def app(request):     host = request.host     if ':' in host:         host, port = host.split(':', 1)     if request.method != 'GET':         return Response('501 Not Implemented', status=501)     elif host != '127.0.0.1' or request.path != '/':         return Response('404 Not Found', status=404)     else:         return Response(time.ctime())

關(guān)于Python 中怎么實(shí)現(xiàn)一個HTTP 服務(wù)器問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


當(dāng)前標(biāo)題:Python中怎么實(shí)現(xiàn)一個HTTP服務(wù)器
轉(zhuǎn)載來源:http://www.yuzhuanjia.cn/article/jpgepi.html
主站蜘蛛池模板: 丰满少妇一级av毛 | 高潮又黄又爽又无遮挡又免费视频 | 99久久久久久宅男 | 91香蕉视频在线看 | av毛片在线免费观看 | 91网视频网| 一区二区国产精品 | 91精品91久久久中77777 | 91羞羞无码一区二区三区 | 丁香婷婷激情网 | 午夜免费精品色网视频 | 国产av永| 厨房玩弄丰腴尤物美妇 | 99久久精品美女高潮噴水 | 91精品国产高久久久久久五月天 | www夜片内射视 | 成a人片亚洲日本久久 | 91精品无码人妻系列九色 | 91狠狠狠狠狠狠狠狠 | 国产av电影区二区三区曰曰 | 91精品国产综合久久久久久 | 午夜精品蜜臀一区二区三区免费 | 囯产无码| 白浆在线 | 午夜刺激爽爽视频免费观看 | AV天堂午夜精品一区二区三区 | 午夜网站在线观看免费完整高清观 | 国产91司机在线观看 | 国产91无码| 东京热人妻无码人a | 99久久婷婷国产综合精品 | 午夜无码 | 91网站免费在线观看 | 囯产香蕉97碰碰碰视频在线观看 | 国产av一区二区三区天 | 18女下面流水不遮图免费图 | 99精品在线无码 | av无码天堂资源网 | 成人理论片 | 二区日韩av| av日韩天堂|