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

Download history 1/week @ 2024-03-26 10/week @ 2024-04-02

57 每月下载量

MIT许可协议

130KB
2.5K SLoC

Build Status Build status Documentation


lib.rs:

路线图

  • Unicorn包装器。
  • 发送头。
  • 通知发送事件完成。
  • 无限缓冲区增长保护。
  • Service实现local_addrpeer_addr
  • 基于套接字类型的泛型多路复用器,允许同时使用TCP和Unix套接字。
  • 接收头。
  • HPACK编码器。
  • HPACK解码器。

此框架为Cocaine Cloud平台提供客户端API。

存在一个表示通用云资源的服务概念,可以使用框架访问。这些包括: LocatorStorageUnicornApp等。

示例

以下示例演示了如何使用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();

框架完全异步,广泛使用tokiofutures与远程服务通信。上面的示例代表高级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