• 了解Web开发中的网关接口协议


    了解Web开发中的网关接口协议

    前言

    最近软工课团队做了个uniapp+django的项目,我虽然负责前端,但是后端都是佬,就偶尔偷师学艺一下。

    以前也用过Django搭建过Web服务,部署的似乎一般就是一条指令完事:

    python manage.py runserver 80
    

    但是后端项目里看佬们使用了一堆看不懂的uwsgi、ASGI……阿巴阿巴。

    故作此文,督促自己去学习新东西。


    我们需要考虑Web开发的两大部分:

    • Web服务器:

      • 解析来自客户端的请求报文,从而调用Web框架程序来处理请求

      • 处理Web框架程序的返回值来组织成响应报文

    • Web框架:

      • 进行路由解析与分发,从而找到相应的正确处理函数

      • 编写处理函数来实现业务逻辑

    这里我们就能看出,如何要实现不同的Web服务器和Web框架交叉混用,最关键的一点就在于规范Web服务器和Web框架之间的调用关系,这也就是接口协议的由来。


    而这个接口协议的一切的一切都得从CGI说起。

    CGI是一种协议,是一种通用的网关接口协议,是Web服务器运行时针对外部程序的一种规范,需要注意的是CGI支持多种语言原生,也就是通用

    CGI初步实现一个最直觉的Web服务过程:客户端向Web服务器发送数据调用服务并取得返回值

    FastCGI则在CGI的基础上扩展了更多的功能,突出一个Fast……=。=哦真的吗?其实不一定会更快。主要区别在于其令CGI解释器称为常驻内存的进程,减少了解释器的反复加载带来的性能消耗。

    FastCGI会起很多CGI解释器进程,由FastCGI进程管理器管理,将来自客户端的请求分发给这些常驻内存的CGI解释器进程。参考CGI 和 FastCGI 协议的运行原理

    SCGI是Simple CGI,是CGI的一种替代版本,强调实现更加简单。

    WSGI则同样是一种Web服务器的网关接口协议,但是是为Python语言专门定义的。

    基于Python实现的Web框架太多了,某位程序员不堪其扰,干脆定义了WSGI,希望让所有基于Python实现的Web框架都要支持WSGI

    ASGI则在WSGI的基础上进一步支持了异步,添加了对WebSocket的支持,同样是一种协议。

    WebSocket是一种不同于HTTP的协议,实现了基于TCP协议的全双工通信,而且和HTTP具有良好的兼容性。在握手部分使用HTTP协议,而其最大特点在于持久化有状态,这与无状态的HTTP协议形成了良好互补。参考WebSocket 是什么原理?为什么可以实现持久连接?

    uWSGI是一种快速便携的Web服务器软件,采用C编写,支持上述的协议。

    uWSGI是Web服务器,是一种桥梁,一边处理着HTTP请求,一边使用上述协议与应用程序进行交互

    nginx是一种更专业的久经验证的Web服务器软件,其相较于uWSGI的区别在于其更加复杂而功能更加全面,处理静态资源会更加优秀,且能够进行均衡负载。因此一般采用nginx根据策略转发给多个uWSGI服务器,再由uWSGI根据接口协议调用框架程序。

    uwsgi是一种基于二进制的线路协议,专门用于uWSGI服务器通信,可以用它在nginx和uWSGI间建立更加高效的链接。

    uwsgi协议相较于其他协议提供了更高的性能,利用二进制文件加快机器解析速率


    Django自带了自己的支持WSGI协议的Web服务器,因此我们通常采用这么一条指令就能启动服务,其中自动使用这套自带的Web服务器作为桥梁。

    python manage.py runserver 80
    

    通常来说,我们在调试期间使用这座桥梁是完全足够的。但是面临实际生产环境或新的需求时,这座基于WSGI的桥梁就不大行了:

    • 基于同步的WSGI不支持异步通信,不支持WebSocket

    • WSGI协议的性能可能不达预期

    因此我们需要为我们的后端配置新的Web服务器,通常来说我们采用uWSGI服务器,因为其支持所有上述协议。


  • 相关阅读:
    规范化注释 VVDocumenter的使用方法
    cocoaPods的安装和使用
    AFNetworking 基本使用
    关于iOS9,Xcode7以上的安全性问题
    在collection view中加入 NavigationController问题
    Network Programming(1)
    System-Level I/O (1)
    Virtual Memory(6)
    Virtual memory(5)
    1. Two Sum
  • 原文地址:https://www.cnblogs.com/neumy/p/16272538.html
Copyright © 2020-2023  润新知