使用ESP8266的独特WSGI Web服务器。第1部分


大家好!

本文是我的教程的第一部分,该教程是关于开发相当不寻常的WSGI服务器的。在本文中,我将解释我的想法的理论部分。

主要读者是熟悉Python但想了解http协议的禅宗的新手开发人员。

准备?我们去找猫吧。

介绍


是的,本文是我的视频的文字伴奏(我正在尝试维护视频博客)。如果有兴趣,请观看Youtube上视频

您是否曾经想过编写别人没有写过的程序?某种疯狂的东西是独一无二的,绝对(或接近绝对)无用,但有趣吗?

没有?好吧,感谢上帝,普通人读了我。

我构想了一个独特且非常有趣的项目,该项目的实施将使我和读者在实践中了解http和Web服务器的实际工作方式。该项目将使读者陷入疯狂的HTTP规范,正则表达式和驱动程序缺陷的悖论中:-)。什么将使您了解底层开发的所有痛苦并享受简单的哑用户需求

顺便说一句,也许您会感到惊讶,但是这个项目的想法并非并非一帆风顺。事实是,我有一个不带Wi-Fi的Raspberry PI Zero和一个带Wi-Fi的NodeMCU。所以我想-在通过Wi-Fi连接到网络的同时,是否可以在Django上编写Web服务器并在Raspberry PI上托管。普通人会想到要么通过Wi-Fi购买树莓,要么将Wi-Fi适配器连接到树莓。我想到了将ESP8266连接到树莓派的想法,但是由于ESP8266无法用作网络适配器,所以这个想法浮现在我脑海。

h,我希望我有理由。现在到重点

理论


Web服务器是一件相当复杂的事情,它在较低的级别上使用套接字,解析原始的HTTP请求,解析标头,管理连接,平衡负载等。并且最好将这个复杂的模块分开,因为该Web应用程序已经在使用模型,控制器和视图等更高级的概念进行操作。这两个部分对于Web的工作都是必要和重要的,但是它们的开发所必需的知识领域并没有太多重叠,因此最好让他们尽可能少地了解彼此。

如您所知,有许多与Python Web服务器应用程序兼容的脚本(Gunicorn,Bojern,CherryPy,但数量不多)。

以及许多可以与任何这些Web服务器一起使用的Web框架。

这是怎么发生的?很简单-我们需要一个标准,这个标准称为WSGI

图片
图1 WSGI

WSGI是PEP规范的一部分,它使您可以使用各种框架和Web应用程序而几乎不必担心它们的兼容性。

下图完美地展示了我对Python Web服务器的想法。

图片

图2

读者可能会注意到图中的ESP8266-不,我不会将Web服务器放置在此设备上,因为与我的想法相比,这太普遍了。

ESP8266用出厂的AT固件烧写,只接受AT指令。但最重要的是,在AT命令的帮助下,他可以将sosket调高,这将接收来自客户端的http请求(通过WiFi接收)并通过串行端口进行广播

ESP在串行端口上传输2个重要参数-套接字ID,表示我们将向客户端返回响应。顺便说一下,ESP8266最多支持4个同时插座连接。当然,http请求

我们的python 3 Web服务器通过将标头折叠到一个特殊的环境对象中来解析http,并通过向其传递start_response方法引发应用程序对象,我们的应用程序将使用该方法返回响应以及环境字典,该环境字典包含所有必需的标头和http请求的主体(必需的方法)以及所需的环境字典键是WSGI规范的关键部分)

框架处理请求并生成一个响应后,它拉的start_response方法,在这种方法中,我们产生的HTTP响应所需的参数,建立了原始的HTML字符串,传递
整个事情到客户端通过串行端口ESP8266,ESP8266,反过来

,我在一篇出色的文章中找到了使用工厂固件刷新ESP8266 AT的正确方法,您可以在“有用的URL”部分的编号2下找到该链接。

对于AT命令,与ESP8266的通信如下(我使用ESPloter shell进行通信)我假设ESP8266具有WiFi。如果未启用Wi-Fi,也可以通过ESPloter轻松完成

  1. 命令AT + CIPMUX = 1-打开多个连接
  2. 命令AT + CIPSERVER = 1.80(端口80,我们打开了)

输入这些命令后,我们将TCP服务器提升到ESP8266,可以接收来自客户端的请求。

我们还通过2条命令将响应返回给客户端

-AT + CIPSEND命令=套接字号,字节数
此命令完成后,终端将等待指定字节数的消息,
当我们输入足够的字符时,传输会话将结束,我们需要输入新命令

AT + CIPCLOSE = number插座。

之后,浏览器结束会话并显示传输的文本

我希望在下周将添加并布置实际部分。我有很多问题,主要是关于终端的操作和http解析,但它们似乎可以解决。

谢谢!直到。

有用的网址


  1. Let's Build Web Server的这篇文章在这个项目中对我有很大帮助。
  2. 在ESP8266上恢复AT固件的文章帮助我刷新了ESP8266
  3. 不要小看官方文件的权力。AT命令的例子

Source: https://habr.com/ru/post/undefined/


All Articles