欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

uWSGI与uwsgi协议

程序员文章站 2022-07-15 11:36:47
...

上一篇博客中有涉及到 NGINX+uWSGI 部署Django应用,其实在部署应用之前本人只是听过uWSGI,对于它的作用知之甚少,因为好学爱问(自认为(⊙o⊙)…),于是翻了一下相关的文档和博客浅识一番,本文将根据自己的理解对博客标题稍作讲解。

主题其实真的很很简单:

  • uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
  • uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

在Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

uWSGI的主要特点如下:

  • 超快的性能。
  • 低内存占用(实测为apache2的mod_wsgi的一半左右)。
  • 多app管理。
  • 详尽的日志功能(可以用来分析app性能和瓶颈)。
  • 高度可定制(内存大小限制,服务一定次数后重启等)

以下翻译一段官网的文档:

Included components (updated to latest stable release)

包含的组件(更新至最新稳定发行版)

The Core (implements configuration, processes management, sockets creation, monitoring, logging, shared memory areas, ipc, cluster membership and the uWSGI Subscription Server)

核心(网络接口配置、进程管理、套接字创建、监控、日志、共享内存区域、进程间通信IPC【inter-Process Communication】、集群关系和uWSGI web服务器 )

Request plugins (implement application server interfaces for various languages and platforms: WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go …)

请求插件(提供各种平台编程语言的网络请求服务器接口:WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go等等)

Gateways (implement load balancers, proxies and routers)

网关(实现负载均衡、代理以及路由功能)

The Emperor (implements massive instances management and monitoring)

网络(实现大量的实例管理和监控)

Loop engines (implement events and concurrency, components can be run in preforking, threaded, asynchronous/evented and green thread/coroutine modes. Various technologies are supported, including uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines and Fibers)

回环引擎(网络事件和并发、组件预创建、线程化、异步/事件驱动、绿色线程/协程模式、各种技术支撑,包含了uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines and Fibers)

官方还说:
uWSGI与uwsgi协议

意思是这个项目发展的比较好且快,所以文档和最新代码实现不一定同步,有问题请发邮件,而且欢迎对最新的文档做出贡献的人(但我们不要你来写代码!)

官网文档在此

关于为什么选择uWSGI,官网如是说:因为你能!把你能的!

uWSGI与uwsgi协议

关于WSGI,你需要知道:

WSGI (Web Server Gateway Interface)

如全称代表的那样,WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的接口规范,处于协议层面(学名web服务器网关接口)!

以层的角度来看,WSGI所在层的位置低于CGI。但与CGI不同的是WSGI具有很强的伸缩性且能运行于多线程或多进程的环境下,这是因为WSGI只是一份标准并没有定义如何去实现。