2 个不稳定版本
0.3.0 | 2019年8月27日 |
---|---|
0.2.0 | 2019年4月18日 |
#13 in #crossbeam
每月下载 22 次
9KB
97 行
crossbeam_requests
更多信息请参阅上方的文档
待办事项
- 重命名回 mpsc_requests?crossbeam-requests 名称不具描述性,且 mpsc_request 名称较低级。
- 更好的错误处理
lib.rs
:
mpsc_requests 重新编写以供 crossbeam 使用,由 @stjepang 编写(https://github.com/crossbeam-rs/crossbeam/issues/353#issuecomment-484013974)
crossbeam_requests 是一个小型库,建立在 crossbeam-channel 之上,但增加了消费者向生产者响应消息的功能。由于生产者不再只负责生产,消费者也不再只负责消费,因此将生产者重命名为 [RequestSender],将消费者重命名为 [RequestReceiver]。
此库基于 crossbeam-requests 而不是标准库中的 mpsc 通道,因为 crossbeam 具有更好的性能和更好的与 Android 的兼容性。
此库的一个完美用例是单线程数据库,需要从多个线程访问(例如 SQLite)
以下是数据流图
|--------------------------------------------------------------------------------------| | 线程 | 请求线程 | 响应线程 | 请求线程 | |--------------------------------------------------------------------------------------| | 结构 | RequestSender -> RequestReceiver -> ResponseSender -> ResponseReceiver | | (方法) | (请求) -> (轮询、轮询循环) -> (响应) -> (收集) | |--------------------------------------------------------------------------------------|
示例
更多示例,请参阅示例目录
更多示例,请参阅测试目录中的测试
简单的回显示例
use std::thread;
use crossbeam_requests::channel;
type RequestType = String;
type ResponseType = String;
let (requester, responder) = channel::<RequestType, ResponseType>();
thread::spawn(move || {
responder.poll_loop(|req, res_sender| {
res_sender.respond(req);
});
});
let msg = String::from("Hello");
let receiver = requester.request(msg.clone()).unwrap();
let res = receiver.collect().unwrap();
assert_eq!(res, msg);
依赖项
~395KB