为什么选择学习 Sanic 框架

举报
宇宙之一粟 发表于 2022/04/19 10:08:41 2022/04/19
【摘要】 Web Server 和框架Sanic 称自己既是一个网络框架,也是一个网络服务器。这是什么意思?更重要的是,为什么这很重要?那么什么是 Web Server?Web ServerWeb服务器是一种软件,旨在通过 HTTP 协议传递文档和数据。它的功能是接受传入的 HTTP 请求,对消息进行解码以了解请求试图完成的任务,并提供适当的响应。Web 服务器的语言是 HTTP 协议。我们可以设置一...

Web Server 和框架

Sanic 称自己既是一个网络框架,也是一个网络服务器。这是什么意思?更重要的是,为什么这很重要?


那么什么是 Web Server?


Web Server


Web服务器是一种软件,旨在通过 HTTP 协议传递文档和数据。它的功能是接受传入的 HTTP 请求,对消息进行解码以了解请求试图完成的任务,并提供适当的响应。Web 服务器的语言是 HTTP 协议。


我们可以设置一个简单的Sanic服务器,然后从 curl 发出请求,并查看消息。


  1. 创建一个server.py 文件,写入如下代码:



from sanic import Sanic, text, Request

app = Sanic(__name__)


@app.post("/")
async def handler(request: Request):
  message = (
    request.head + b'\n\n' + request.body
  ).decode("utf-8")
  
  print(message)
  return text("Done")
  
app.run(port=8088, debug=True)


  1. 执行sanic server.app ,运行该服务器

  2. 打开另一个终端,运行curl localhost:8088 -d '{"foo": "bar"}' 语句,能看到如下输出:



然后回到另一个终端,能看到 HTTP 请求消息,如下内容:


POST / HTTP/1.1
Host: localhost:8088
User-Agent: curl/7.68.0
Accept: */*
Content-Length: 14
Content-Type: application/x-www-form-urlencoded

{"foo": "bar"}


  • 第一行包含 HTTP 方法、路径和使用的 HTTP 协议

  • 接下来是 HTTP 头的列表,每行一个,格式为key:value

  • 最后是 HTTP 正文,前面有一个空行。HTTP 响应非常相似:


HTTP/1.1 200 OK
content-length: 4
connection: keep-alive
content-type: text/plain; charset=utf-8
Done


  • 第一行包含 HTTP 协议,然后是 HTTP 状态和状态描述

  • 接下来是 HTTP 头的列表,每行一个,格式为 key:value

  • 最后是HTTP正文(如果有),前面有一个空行。



虽然这是 Web 服务器的语言,但编写所有这些内容非常麻烦。因此,Web 浏览器和 HTTP 客户端库等工具被创建来为我们构建和解析这些消息。

Web 框架

当然,我们可以用 Python 编写一个程序,接收这些原始 HTTP 消息,对它们进行解码,然后返回一个适当的 HTTP 响应消息。然而,这将需要大量的文件,难以扩展,并且容易出错。


有一些工具可以帮我们做到这一点:Web框架。Web 框架的工作是构建 HTTP 消息并适当地处理请求。许多框架通过提供便利和实用程序来进一步简化流程。


Python 生态系统中有许多 Web 框架在不同程度上完成了这项工作。有些提供了大量的功能,有些则非常稀少。有些非常严格,有些则更加开放。Sanic 只在不妨碍开发人员的情况下,才尝试保持功能丰富的连续性。


Sanic提供的一个功能是,它既是一个 Web 框架,也是一个 Web 服务器。Web 框架做的就是有一个服务器调用一个输入函数,向其传递有关请求的信息,并得到响应。


async/await 风格的协程处理程序的项目,绝大多数都需要运行一个ASGI服务器。它遵循一个类似的模式:一个ASGI就绪的服务器调用一个ASGI就绪的框架。


这两个组件使用一个特定的协议相互操作。目前有三种流行的ASGI服务器:uvicornhypercorndaphne

Sanic

正因为 Sanic 诞生于 ASGI 之前的时代,它需要自己的服务器。随着时间的推移,这已经成为它最大的资产之一,并且在很大程度上是它胜过其他大多数 Python 框架的原因。Sanic 服务器的开发非常注重性能和请求/响应周期的最小化。然而,近年来 Sanic 也采用了 ASGI 接口,使其能够由 ASGI 网络服务器运行。


Sanic 具备开箱即用的功能,它可以用于编写,部署和扩展生产级 Web 应用程序。


为什么选择 Sanic 框架学习呢?官方给出了 6 个原因:


特征(Features)


  • 内置极速 web server

  • 生产准备就绪

  • 极高的拓展性

  • 支持 ASGI

  • 简单直观的 API 设计

  • 社区保障

总结

Sanic 会被看作是为 Flask 应用带来 async/await 风格编程的一种尝试。虽然这可能是最初的概念验证的一个公平的观点,但 Sanic 在一个非常不同的道路上发展,其目标和影响是成为一个为性能应用设计的强大工具。


因此,Sanic 通常被那些希望建立一个丰富环境的开发者和团队所使用,以解决他们的应用需求所要求的独特的、明显的设计模式。该项目的意图是消除构建网络服务器的困难或繁琐部分,并提供工具来创建高性能和可扩展的网络应用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。