1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年3月11日 |
---|
#8 in #coap-server
29KB
760 行
青铜
青铜是一个旨在创建高性能CoAP服务器的CoAP框架。目前并不打算用于资源受限的设备,但这是一个长期目标。
青铜使用mio处理所有网络请求,这意味着它的开销非常低。
状态
青铜尚未完成,您可能不应该使用它。
目前可以创建直接处理传入CoAP数据包的服务器,但还没有自动处理重试或多数据包消息的功能。
尚未实现客户端请求。
入门指南
要使用青铜,请将以下内容添加到您的Cargo.toml
[dependencies]
bronze = "0.1"
然后您需要创建并运行服务器,以下是一个简单的示例:
extern crate bronze;
use bronze::endpoint::Endpoint;
use bronze::nullserver::NullServer;
fn main() {
let local_addr = "127.0.0.1:5683".parse().unwrap();
println!("CoAP Server Listening on {}", local_addr);
Endpoint::new(local_addr).run(NullServer);
}
此示例使用包含的NullServer
,这是一个如何编写请求处理器的示例。NullServer简单地用RST消息回复所有有效的CoAP数据包。它是用以下方式实现的:
use message::*;
use endpoint::RequestHandler;
use std::net::SocketAddr;
pub struct NullServer;
impl RequestHandler for NullServer {
fn handle_request(&self, _addr: SocketAddr, in_pkt: &[u8]) -> Option<Vec<u8>> {
//verify it's a real coap packet
match Message::from_bin(in_pkt) {
// is coap, reply with Reset
// todo: would it be better to use an ack w/ error code?
Ok(request) => {
let reply = Message{
version: 1,
mtype: Mtype::Reset,
code: Code::Empty,
mid: request.mid,
token: request.token.clone(),
options: vec![],
payload: vec![]
};
Some(reply.as_bin().unwrap())
},
// not coap, ignore (prevents participating in reflection attacks)
Err(_) => {
None
}
}
}
}
依赖项
~3.5MB
~70K SLoC