2 个版本
0.1.1 | 2022 年 5 月 4 日 |
---|---|
0.1.0 | 2022 年 4 月 28 日 |
#33 in #coap
35 每月下载量
110KB
2.5K SLoC
健壮、易用的 Rust CoAP 服务器
一个异步的 CoAP 服务器,具有现代和易用的 API,适用于更大规模的应用程序,灵感来源于 warp 和 actix。CoAP 为资源受限的环境,如物联网设备,提供了一个极佳的 HTTP 替代方案。
- 易用性:流畅的应用程序构建器 API 使构建丰富的应用程序变得简单,包括使用更高级 CoAP 功能的应用程序。
- 并发:通过为每个请求创建单独的子任务支持高并发,允许长运行请求不会干扰短运行请求的规模。
- 功能丰富:方便地支持一系列 CoAP 服务器功能,包括 Observe 和 分块传输。
- 灵活:支持可插拔的传输后端,旨在支持替代的异步运行时,如 embassy。
示例
use coap_server::app::{CoapError, Request, Response};
use coap_server::{app, CoapServer, FatalServerError, UdpTransport};
#[tokio::main]
async fn main() -> Result<(), FatalServerError> {
let server = CoapServer::bind(UdpTransport::new("0.0.0.0:5683")).await?;
server.serve(
app::new().resource(
app::resource("/hello").get(handle_get_hello))
).await
}
async fn handle_get_hello(request: Request<SocketAddr>) -> Result<Response, CoapError> {
let whom = request
.unmatched_path
.first()
.cloned()
.unwrap_or_else(|| "world".to_string());
let mut response = request.new_response();
response.message.payload = format!("Hello, {whom}").into_bytes();
Ok(response)
}
为了进行实验,我建议使用出色的 coap-client 命令行工具,如下所示:
$ coap-client -m get coap://127.0.0.1/hello
Hello, world
更多示例请参阅 示例。
功能
该项目旨在成为一个健壮且完整的 CoAP 服务器,特别是为基于 Rust 的项目提供一个更方便的 MQTT 替代方案。
- 正确且方便的 Observe 支持 (RFC 7641)
- 分块传输支持 (RFC 7959)
- 通过
/.well-known/core
进行资源发现和过滤 (RFC 6690) - 多播 UDP
- 完全并发请求处理(无头阻塞或扩展惊喜!)
- Ping/Pong 保持连接消息
期望但尚未实现
相关项目
- martindisch/coap-lite:该项目用作支持 CoAP 协议的底层基础
- Covertness/coap-rs:我最初使用的原始服务器,但随着我需要更健壮的功能(如泛型 Observe 支持和
/.well-known/core
过滤)而变得过时。 - ryankurte/rust-coap-client:受此 crate 基于客户端后端优秀泛化的启发而创建
- google/rust-async-coap
依赖项
~8–19MB
~246K SLoC