💻PicoServer.Nano 文档
PicoServer.Nano 是 PicoServer 的 .NET nanoFramework 移植版本,让你在 ESP32、STM32 等微控制器上用 C# 运行轻量级 Web 服务。一套 API ,让桌面端、云端、嵌入式 Linux 、微控制器拥有一致的开发体验。
🎯 特性
- 轻量:代码量小,资源占用少
- 简单:一行代码添加路由
- 中间件支持:自定义拦截逻辑
- 静态文件托管:支持 CSS/JS/HTML 等
- SSE 长连接:WriteChunk 方法实现实时推送
- 文件上传/下载:流式处理,内存友好
- Token 认证:简单 Token 验证
📦 安装
1. 烧录 nanoFramework 固件
nanoff --target ESP32_S3_ALL --serialport COMx --update --masserase
2. 添加 NuGet 包
dotnet add package PicoServer.Nano
🚀 快速开始
using PicoServer.Nano;
using System.Net;
var server = new WebAPIServer();
// 添加路由
server.AddRoute("/hello", HelloHandler, "GET");
// 启动服务
server.StartServer(80);
Console.WriteLine($"服务器已启动: http://{server.GetIPAddress()}/");
static void HelloHandler(HttpListenerRequest req, HttpListenerResponse res)
{
res.Write("Hello PicoServer!");
}
📚 API 参考
路由注册
// 精准路由
server.AddRoute("/api/user", UserHandler, "GET");
// 处理器签名
private static void UserHandler(HttpListenerRequest req, HttpListenerResponse res)
{
string token = req.GetToken();
res.Write("{\"id\":1}");
}
中间件
// 添加中间件(返回 true 继续,false 拦截)
server.AddMiddleware((req, res) =>
{
if (req.Headers["X-Key"] != "secret")
{
res.Write("Unauthorized", 401);
return false;
}
return true;
});
内置中间件
// Token 认证
server.AddSimpleTokenVerify("your-token");
// 静态文件托管
server.AddStaticFiles("/web", "I:\\www", maxAge: 3600);
// 白名单(跳过认证)
server.RouteWhiteList.Add("/web");
响应扩展
| 方法 | 说明 |
|---|---|
res.Write(content, contentType) |
写入响应并关闭 |
res.SendFile(filePath) |
发送文件(流式) |
res.WriteChunk(content) |
分块推送(SSE/长连接) |
请求扩展
| 方法 | 说明 |
|---|---|
req.GetToken() |
获取 Authorization 头中的 Token |
req.ReadBodyAsString() |
读取请求体为字符串 |
req.SaveFile(savePath) |
保存上传文件 |
工具方法
// 获取设备 IP
string ip = server.GetIPAddress();
// 获取时间戳
long ts = server.GetTimeStamp10(3600);
// 获取 MIME 类型
string ct = WebAPIExt.GetContentType(".html");
// 返回 "text/html;charset=UTF-8"
📊 性能数据
测试平台:ESP32-S3 N16R8 局域网 WIFI
# 6 并发短时压力测试命令
hey -n 50 -c 6 http://192.168.2.67
| 配置 | 稳定并发 | QPS | 平均延迟 | 成功率 |
|---|---|---|---|---|
| 无 PSRAM | 6 | ~8 | ~220 ms | 100% |
| 有 PSRAM | 6 | ~26 | ~210 ms | 100% |
在 ESP32-S3 上实测:启用 PSRAM 时 QPS 约 26,不启用时约 8,均稳定 6 并发,成功率 100%。STM32 预计性能更高。提高并发虽然可行,但受底层网络协议栈(lwIP)限制,过高并发容易导致丢包。
⚠️ 注意事项
- 路径格式:使用反斜杠
\,如"I:\\www" - 静态文件:文件需部署到设备(生成操作设为"内容")
- 白名单:静态文件路由需加入白名单跳过认证
- 长连接:
WriteChunk推送结束后必须调用res.Close()
📖 更多资源
发布时间: