加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Python 中的 HTTP 服务器

发布时间:2019-07-04 19:19:40 所属栏目:业界 来源:Python中文社区
导读:David Wheeler有一句名言:计较机科学中的任何题目,都可以通过加上另一层间接的中间层办理。 为了进步Python收集处事的可移植性,Python社区在PEP 333中提出了Web处事器网关接口(WSGI,Web Server Gateway Interface)。 WSGL尺度就是添加了一层中间层。通
副问题[/!--empirenews.page--]

David Wheeler有一句名言:“计较机科学中的任何题目,都可以通过加上另一层间接的中间层办理。”

为了进步Python收集处事的可移植性,Python社区在PEP 333中提出了Web处事器网关接口(WSGI,Web Server Gateway Interface)。

WSGL尺度就是添加了一层中间层。通过这一此中间层,用Python编写的HTTP处事就可以或许与任何Web处事器举办交互了。此刻,WSGI已经成为了行使Python举办HTTP操纵的尺度要领。

凭证尺度的界说,WSGI应用措施是可以被挪用的,而且有两个输入参数。

Python 中的 HTTP 处事器

1、WSGI

下面是第一段代码,第一个参数是environ,用于吸取一个字典,字典中提供的键值对是旧式的CGI情形荟萃的拓展。第二个参数自己也是可以被挪用的,风俗上会将其定名为start_response(),WSGI应用措施通过这个参数来声明相应头信息。

  1. # 用WSGI应用情势编写的简朴HTTP处事。 
  2. #!/usr/bin/env python3 
  3. # A simple HTTP service built directly against the low-level WSGI spec. 
  4.  
  5. from pprint import pformat 
  6. from wsgiref.simple_server import make_server 
  7.  
  8. def app(environ, start_response): 
  9.     headers = {'Content-Type': 'text/plain; charset=utf-8'} 
  10.     start_response('200 OK', list(headers.items())) 
  11.     yield 'Here is the WSGI environment: 
  12.  
  13. '.encode('utf-8') 
  14.     yield pformat(environ).encode('utf-8') 
  15.  
  16. if __name__ == '__main__': 
  17.     httpd = make_server('', 8000, app) 
  18.     host, port = httpd.socket.getsockname() 
  19.     print('Serving on', host, 'port', port) 
  20.     httpd.serve_forever() 

上述只是一个简朴的环境。可是在编写处事器措施时,伟大度就大大晋升了。这是由于要完全思量尺度中的描写的很多留意点和界线环境。

2、前向署理与反向署理

无论前向署理照旧反向署理,HTTP署理着实就是一个HTTP处事器,用于吸取哀求,然后对吸取到的哀求(至少是部门哀求)举办转发。转发哀求时署分析饰演客户端的脚色,将转发的HTTP哀求发送至真正的处事器,最后将从处事器接管到的相应施展饰演客户端的脚色,将转发的哀求发送至真正的处事器,最后将从处事器接管到的相应发回给最初的客户端。

下面是前向署理和反向署理的简图。

Python 中的 HTTP 处事器

反向署理已经普及应用于大型的HTTP处事傍边。反向署理是Web处事的一部门,对付HTTP客户端并不行见。

3、四种架构

架构师一样平常都行使许多种伟大的机制来将多个子模块组合建成一个HTTP处事。此刻在Python社区中,已经形成了4种最根基的模式。假如已经编写了用于天生动态内容的Python代码,而且已经选择了某个支持WSGI的API或框架,应该怎样将HTTP处事陈设到线上呢?

  • 运行一个行使Python编写的处事器,处事器的代码中可以直接挪用WSGI接口。此刻最风行的是Green Unicorn(Gunicorn)处事器,不外也有其他已经可以用于出产情形的纯Python处事器。
  • 设置mod_wsgi并运行Apache,在一个独立的WSFIDaemonProcess中运行Python代码,由mod_wsgi启动保卫历程。
  • 在后端运行一个相同于Gunicorn的Python HTTP处事器(可能支持所选异步框架的任那里事器),然后在前端运行一个既能返回静态文件,又能对Python编写的动态资源处事举办反向署理的Web处事器。
  • 在最前端运行一个纯粹的反向署理(如Varnish),在该反向署理后端运行Apache可能nginx,在后端运行Python编写的HTTP处事器。这是一个三层的架构。这些反向署理可以漫衍在差异的地理位置,这样子就可以或许将离客户端最近的反向署理上的缓存资源返回给发送哀求的客户端。

Python 中的 HTTP 处事器

恒久以来,对这4个架构的选择首要基于CPython的3个运行时的特征,即表明器占用内存大、表明器运行慢、全局表明器(GIL,Global Interpreter Lock)榨取多个线程同时运行Python字节码。但同时带来了内存中只能载入必然数目的Python实例。

4、平台即处事

这个观念的呈现是由于此刻的自动化陈设、一连集成以及高机能大局限处事的相干技能的呈现和处理赏罚有一些繁杂。以是有一些提供商提出了PaaS(Platform as a Service),此刻只需体谅应该怎样打包本身的应用措施,以便将本身的应用陈设到这些处事之上。

PaaS提供商会办理构建和运行HTTP处事中的呈现的各类烦苦衷。不必要再体谅处事器,可能是提供IP地点之类的工作。

PaaS会按照客户局限提供负载平衡器。只必要给PaaS提供商提供设置文件即可完成各类伟大的步调。

现阶段较量常用的有Heroku和Docker。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读