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 功能,请参阅文档。

## 示例应用程序
```
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 @ 160 MHz,MicroPython,Wi-Fi STA 模式,单连接。
标签:HTTP服务器, MicroPython, 内存优化, 嵌入式系统, 底层编程, 物联网, 计算机取证, 路由控制, 逆向工具