2 个版本
使用旧的 Rust 2015
0.1.1 | 2017 年 6 月 25 日 |
---|---|
0.1.0 | 2017 年 6 月 25 日 |
#14 in #网络管理器
18KB
438 行
rust-network-communicator
基于 tokio-curl crate 的下载/上传内容的网络管理器。
用法
首先,将此内容添加到您的 Cargo.toml 文件中
[dependencies]
network-communicator = "0.1"
然后,将此内容添加到您的 crate 中
extern crate network_communicator;
许可证
tokio-curl 主要在 MIT 许可证的条款下分发。
有关详细信息,请参阅 LICENSE。
lib.rs
:
描述
为下载内容创建线程池。它提供发送请求和接收结果的通道。
示例
extern crate network_communicator;
extern crate curl;
use network_communicator::NetworkManagerHandle;
use network_communicator::NetworkManager;
use network_communicator::Config;
use network_communicator::Task;
use std::sync::{Arc,Mutex};
struct Payload {
input: Arc<Mutex<Vec<u8>>>,
}
impl Payload {
fn new() -> Payload {
Payload {
input: Arc::new(Mutex::new(vec![])),
}
}
}
fn network_manager() -> NetworkManagerHandle<Payload,()> {
let mut config = Config::new(1).expect("Unable to create config");
config.set_limit_task_channel(10000).unwrap();
config.set_limit_result_channel(10000).unwrap();
let manager = NetworkManager::start(&config).expect("Unable to create network manager");
return manager;
}
fn get_request(url:&str) -> Task<Payload,()> {
let url = String::from(url);
Task::new(Payload::new(),move |payload,request|{
let payload_input = payload.input.clone();
request.url(&url)?;
request.write_function(move |data| {
payload_input.lock().unwrap().extend_from_slice(data);
Ok(data.len())
})?;
Ok(())
})
}
let manager = network_manager();
manager.send(get_request("https://github.com")).expect("Unable to send request");
manager.send(get_request("https://rust-lang.net.cn")).expect("Unable to send request");
依赖关系
~13–20MB
~295K SLoC