szeka9/PyRobusta

GitHub: szeka9/PyRobusta

PyRobusta 是一款专为 MicroPython 嵌入式设备设计的内存优化 HTTP/1.1 服务器库,通过固定缓冲区和状态机解析实现可预测的低内存占用网络服务。

Stars: 3 | Forks: 0

# PyRobusta PyRobusta 是一个注重内存使用的 HTTP/1.1 服务器库,专为那些高度关注堆内存占用、连接可靠性和流处理效率的嵌入式设备而构建。PyRobusta 提供了健壮的 keep-alive 连接管理和高效的字节流处理能力,同时保持了可预测的内存占用。 ## HTTP 功能 - 路由装饰器和基于通配符的 URL 匹配 - Multipart 请求和响应处理 - 支持 chunked encoding 和流式 payload - 支持带 percent encoding 的查询参数解析 - 内置用于上传、下载和删除服务器上存储的文件的 API - 通过 `Connection: keep-alive` header 处理持久连接 - 支持 HTTP/1.0 和 HTTP/1.1 - 基本身份验证和 RBAC 授权 - 为浏览器客户端提供 CSRF 保护 - 支持 TLS ## 设计原则 - 通过固定大小的 stream buffer 实现可预测的内存使用 - 增量字节流处理,具有有限的内存开销 - 状态机驱动的请求解析,确保可扩展性和协议正确性 - 可靠的连接处理,包括 keep-alive、超时和传输错误恢复 - 专为 MicroPython 和内存受限的嵌入式环境设计 ## 项目状态 PyRobusta 正在积极开发中。其公开 API 尚未被认为是 稳定的,在不同版本之间可能会发生变化。 从 v1.0.0 版本开始,将在每个主版本内保持向后兼容。在此之前引入的任何不向下兼容的更改都将在发布说明中明确记录。 # 安装 使用 mip 包管理器在支持 MicroPython 的设备上安装 PyRobusta。 至少需要 40 KB 的空闲堆内存。然而,为了获得更好的可用性和稳定性, 强烈建议使用具有更多 SRAM 的设备。ESP32-C3 SuperMini 是一个很好的 入门级选择,在安装后能提供较为充裕的可用内存。 如果您还没有配置好环境,请按照[设置指南](./docs/setup.md)安装 mpremote 并将您的设备连接到 Wi-Fi。 ``` # 安装最新版本的 PyRobusta import mip mip.install("github:szeka9/PyRobusta") # 安装所需的 assets from pyrobusta.utils.assets import install_www install_www() # 启动 HTTP server import asyncio from pyrobusta.server.http_server import HttpServer async def main(): server = HttpServer() await server.start_socket_server() while True: await asyncio.sleep(1) asyncio.run(main()) ``` # 验证安装 打开 Web 浏览器,并在地址栏中输入您设备的 IP 地址。 如果服务器运行正常,将显示默认主页。 有关配置选项、路由、流式 payload 以及高级 HTTP 功能,请参阅文档。 ![图片信息](https://static.pigsec.cn/wp-content/uploads/repos/cas/62/62f6a668788d817000bd0022fc303d5117b961a56862d9eb31def6aa4521cad3.png) ## 示例应用程序 ``` import asyncio from gc import mem_free, mem_alloc, collect import pyrobusta.server.http_server as http_server from pyrobusta.protocol.http import HttpEngine @HttpEngine.route("/mem-usage", "GET") def mem_usage(http_ctx, _): collect() free = mem_free() used = mem_alloc() usage_percentage = 100 * used / (free + used) return "text/plain", ( f"Currently used: {usage_percentage:.2f}%\n" f"Free [bytes]: {free}\n" f"Used [bytes]: {used}\n" f"Total [bytes]: {used + free}\n" ) async def main(): server = http_server.HttpServer() await server.start_socket_server() while True: await asyncio.sleep(1) asyncio.run(main()) ``` 查看[应用程序开发](./docs/application_development/index.md)指南, 了解有关支持的功能和实际示例的更多详细信息。 # 开发 查看提供的[开发](./docs/development.md)指南,了解如何为您的设备创建和部署自定义构建, 以及运行测试和静态代码检查工具。 # 配置与优化 要微调堆使用并优化性能,请参阅: - [容量规划](./docs/dimensioning/http_dimensioning.md) - [配置设置](./docs/application_development/configuration.md) # 性能与稳定性 PyRobusta 已在 ESP32 级别的硬件上进行了持续负载基准测试。 详细的基准测试结果、可扩展性测量和稳定性测试 (Soak testing) 可在[容量规划](./docs/dimensioning)和 [稳定性测试 (Soak testing)](./docs/soak)文档中找到。 在一次 5 分钟的性能测试中,服务器处理了 **922 个 HTTP 请求且零错误**, 同时在整个测试过程中堆内存使用量保持稳定,没有 明显的内存增长。 该基准测试同时涵盖了响应生成和请求体处理, 使用对默认 index 页面的重复 GET 请求以及由 10 个 256 字节 chunk 组成的 chunked POST 上传。 ![esp32_c3_base](https://static.pigsec.cn/wp-content/uploads/repos/cas/76/76c14bbd1b378942d3a2ecafd49362262d15794c0e369ad392be60acc7447eaf.png) **测试平台:** ESP32-C3 @ 160 MHz,MicroPython,Wi-Fi STA 模式,单连接。
标签:HTTP服务器, MicroPython, 内存优化, 嵌入式系统, 底层编程, 物联网, 计算机取证, 路由控制, 逆向工具