为什么选择学习 Sanic 框架

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

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 服务器:uvicornhypercorn daphne

Sanic

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


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


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


特征(Features)


  • 内置极速 web server
  • 生产准备就绪
  • 极高的拓展性
  • 支持 ASGI
  • 简单直观的 API 设计
  • 社区保障

总结

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


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

相关文章
|
4月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。
|
JSON 缓存 NoSQL
Sanic教程: 6.常用的技巧
Sanic教程: 6.常用的技巧
|
12天前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
19 0
|
11天前
|
存储 测试技术 开发者
FastAPI异步处理的神奇之处:如何用Python打造高性能Web应用,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代Web开发中,高性能至关重要。FastAPI作为一款高性能Python Web框架,支持多种异步处理方式,包括非阻塞I/O、异步函数(async/await)及异步上下文管理器(async with),能够大幅提升应用性能。本文通过示例代码详细介绍了FastAPI中的异步处理方法,并分享了最佳实践,帮助开发者构建高效的Web应用。
32 0
|
4月前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
4月前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
4月前
|
JSON API 数据格式
构建高效Python Web应用:Flask框架与RESTful API设计实践
【2月更文挑战第17天】在现代Web开发中,轻量级框架与RESTful API设计成为了提升应用性能和可维护性的关键。本文将深入探讨如何使用Python的Flask框架来构建高效的Web服务,并通过具体实例分析RESTful API的设计原则及其实现过程。我们将从基本的应用架构出发,逐步介绍如何利用Flask的灵活性进行模块化开发,并结合请求处理、数据验证以及安全性考虑,打造出一个既符合标准又易于扩展的Web应用。
773 4
|
4月前
|
数据库 开发者 Python
Python在Web开发中的应用:Flask与Django框架介绍与实践
Python在Web开发中的应用:Flask与Django框架介绍与实践
127 0
|
微服务
Sanic教程: 2.配置
Sanic教程: 2.配置
|
11月前
|
数据采集 Linux Python
Scrapy 框架学习
Scrapy 框架学习
35 0
Scrapy 框架学习