19个版本
使用旧的Rust 2015
0.9.2 | 2018年6月25日 |
---|---|
0.9.1 | 2018年1月15日 |
0.9.0 | 2017年12月12日 |
0.8.2 | 2017年10月27日 |
0.1.0 | 2015年7月14日 |
#6 in #hpack
57 每月下载量
130KB
2.5K SLoC
lib.rs
:
路线图
- Unicorn包装器。
- 发送头。
- 通知发送事件完成。
- 无限缓冲区增长保护。
- 为
Service
实现local_addr
和peer_addr
。 - 基于套接字类型的泛型多路复用器,允许同时使用TCP和Unix套接字。
- 接收头。
- HPACK编码器。
- HPACK解码器。
此框架为Cocaine Cloud平台提供客户端API。
存在一个表示通用云资源的服务概念,可以使用框架访问。这些包括: Locator
、Storage
、Unicorn
、App
等。
示例
以下示例演示了如何使用Storage服务保存BLOB。
use cocaine::{Core, Service};
use cocaine::service::Storage;
let mut core = Core::new().unwrap();
let storage = Storage::new(Service::new("storage", &core.handle()));
let future = storage.write("collection", "key", "le message".as_bytes(), &[]);
core.run(future).unwrap();
框架完全异步,广泛使用tokio
和futures
与远程服务通信。上面的示例代表高级API,但也执行数据复制,在某些情况下这是不必要的。但是,可以通过使用与Service
对象结合的Dispatch
特性和直接从套接字线程中调用分发对象来完全避免这一点,因为数据以零复制方式存在于套接字线程中。
extern crate cocaine;
extern crate futures;
use std::mem;
use futures::sync::oneshot::{self, Sender};
use cocaine::{Core, Dispatch, Error, Response, Request, Service};
use cocaine::protocol::{Flatten, Primitive};
struct ReadDispatch {
completion: Sender<()>,
}
impl Dispatch for ReadDispatch {
fn process(self: Box<Self>, response: &Response) -> Option<Box<Dispatch>> {
let data = response.deserialize::<Primitive<&str>>().flatten();
println!("Data: {:?}", data);
mem::drop(self.completion);
None
}
fn discard(self: Box<Self>, err: &Error) {
println!("Error: {}", err);
mem::drop(self.completion);
}
}
fn main() {
let mut core = Core::new().unwrap();
let service = Service::new("storage", &core.handle());
let (tx, rx) = oneshot::channel();
service.call(Request::new(0, &("collection", "key")).unwrap(), ReadDispatch { completion: tx });
core.run(rx).unwrap();
}
模块
在根模块中定义了低级API,以及在service
模块中定位的高级API。
要求
- Rust nightly,因为它广泛使用目前不稳定的功能。
依赖项
~7.5MB
~130K SLoC