什么是WSGI

  #CGI
CGI(Common Gateway Interface,通用网关接口),定义客户端与Web服务器的交流方式的一个程序,例如正常情况下客户端发送过来一个请求,根据HTTP协议Web服务器将请求的内容解析出来, 经过处理会后,再将返回的内容封装好。例如服务器返回一个HTML页面,并且根据HTTP协议构建返回内容的响应格式,涉及到TCP连接、HTTP原始请求和相应格式都是由一个软件来完成,这个程序就是CGI。 #WSGI
WSGI(Python Web Server Gateway Interface,WSGI)Web服务器网关接口,是为Python语言定义的Web服务器和Web应用程序或框架之间的联系,那个简单而且通用的接口, 从语义上理解,WSGI为了解决Web服务器与客户端之间的通信问题而产生的。并且WSGI是基于现存的CGI标准而设计的,同样是一种程序 #ASGI
ASGI是异步网关协议接口,介于网络服务和python饮用应用之间的标准接口,能够处理多种通用的协议类型,包括http,http2和websocket. #关于WSGI和ASGI的区别是
WSGI是基于http协议模式开发的,不支持websocket,而ASGI的诞生解决了python中的WSGI不支持当前的web开发中的一些新的协议标准,同时ASGI支持原有模式和Websocket的扩展, 即ASGI是WSGI的扩展.

HTTP的一个例子:

  用户发出一个HTTP请求。

  我们打开了一个新的http键入包含请求路径、方法、头等详细信息的范围。

  我们发送一个http.request带有HTTP正文内容的事件

  channels或ASGI应用程序对此进行处理,并生成http.response事件发送回浏览器并关闭连接。

  HTTP请求/响应完成,作用域被破坏。

  #注:一次客户端发出请求,服务器接收并回应请求消息,客户端停止访问,页面不动,服务断开,这就是cgi,在python里面它就是wsgi

聊天机器人的一个例子:

  用户向聊天机器人发送第一条消息。

  这将打开一个包含用户用户名、所选名称和用户标识的范围。

  应用程序给出了一个chat.received_message使用eventtext事件。它不需要响应,但可以将一条、两条或更多其他聊天消息作为chat.send_message如果它想的话。

  用户向聊天机器人发送更多信息chat.received_message事件被生成。

  超时后或应用程序进程重新启动时,范围被关闭。

  HTTP请求/响应完成,作用域被破坏

  #注:用户向聊天机器人发送消息,通道打开,也就是范围开启,聊天机器人可以回应也可以不回应,在超时后或应用程序进程重新启动时,通道关闭,范围关闭,聊天结束。在下一次用户发送消息,通道打开,聊天继续

总结

在一个作用域的生命周期内——无论是聊天、HTTP请求、socketconnection还是其他什么——您将有一个应用程序实例处理其中的所有事件,并且您还可以将事情持久化到应用程序实例上。

如果你愿意,你可以选择写一个原始的ASGI应用程序,但是channels给了你一个简单易用的抽象顾客。

注:如有描述不正的地方,请与我联系

wsgi和asgi的关系的更多相关文章

  1. 如何理解Nginx, WSGI, Flask之间的关系

    概览 之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 ...

  2. uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。

    WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...

  3. 2020年是时候更新你的技术武器库了:Asgi vs Wsgi(FastAPI vs Flask)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_167 也许这一篇的标题有那么一点不厚道,因为Asgi(Asynchronous Server Gateway Interface) ...

  4. 区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI

    在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系. CGI CGI,(Common Gateway Interface)通用网关接口,是 ...

  5. 九、Django3的ASGI

    九.Django3的ASGI 9.1.Web应用程序和web服务器 Web应用程序(Web)是一种能完成web业务逻辑,能让用户基于web浏览器访问的应用程序,它可以是一个实现http请求和响应功能的 ...

  6. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  7. 高并发异步uwsgi+web.py+gevent

    为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...

  8. BAT-Python面试题

    Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def fun(a): a = 2 fun(a) print(a) # 1 代码二: a = ...

  9. 测开面试 | Python语言常见问题

    1.面向对象的概念? 面向对象编程,简称OOP,是一种程序设计思想 主要包括:类.继承.多态(子类方法覆盖父类方法).实例.属性.方法 2.什么是进程.线程.协程? 进程:独立数据空间,进程间不共享数 ...

随机推荐

  1. linux的time命令

    查看程序执行时间

  2. 记php多张图片 合并生成竖列 纵向长图(可用于商品详情图合并下载)

    <?php namespace app\mapi\common\image; /** * 拼接多幅图片成为一张图片 * * 参数说明:原图片为文件路径数组,目的图片如果留空,则不保存结果 * * ...

  3. Linux下Docker容器安装与使用

    注:作者使用的环境是CentOS 7,64位,使用yum源安装. 一.Docker容器的安装 1.查看操作系统及内核版本,CentOS 7安装docker要求系统为64位.系统内核版本为 3.10及以 ...

  4. 面试必看!凭借着这份 MySQL 高频面试题,我拿到了京东,字节的offer!

    前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面 ...

  5. docker和k8s的概念-IaaS、PaaS、SaaS 的区别

    docker和k8s 参考: 什么是Docker? Kubernetes概述 openstack,docker,mesos,k8s什么关系? IaaS.PaaS.SaaS的概念 SaaS:软件服务,S ...

  6. js 时间日期与时间戳之间转换

    1 1.将时间(2017-08-10)转换时间戳 2 var startTime = '2017-08-10'; 3 var startdate = new Date(Date.parse(start ...

  7. C语言讲义——内存管理

    动态分配内存 动态分配内存,在堆(heap)中分配. void *malloc(unsigned int num_bytes); 头文件 stdlib.h或malloc.h 向系统申请分配size个字 ...

  8. VisualStudio C++使用汇编函数

    Visual Studio编写C++代码使用汇编函数 新建空项目 新建如下源文件 ;test.asm ;测试函数 三个数相加 ;.386 .model flat, c ;public test_ .c ...

  9. CentOS 7防火墙的关闭与开启

    (1)CentOS 7.0默认使用的是firewall作为防火墙:若没有启用iptables 作为防火墙,则使用以下方式关闭防火墙: systemctl stop firewalld.service ...

  10. 不使用 MQ 如何实现 pub/sub 场景?

    hello,大家好,我是小黑,又和大家见面啦~~ 在配置中心中,有一个经典的 pub/sub 场景:某个配置项发生变更之后,需要实时的同步到各个服务端节点,同时推送给客户端集群. 在之前实现的简易版配 ...