#网络管理器 #网络 #内容 #下载 #通信器 #tokio-curl #下载上传

network-communicator

基于 tokio-curl crate 的 HTTP 协议下载/上传内容的网络管理器

2 个版本

使用旧的 Rust 2015

0.1.1 2017 年 6 月 25 日
0.1.0 2017 年 6 月 25 日

#14 in #网络管理器

MIT 许可证

18KB
438

rust-network-communicator

基于 tokio-curl crate 的下载/上传内容的网络管理器。

Build Status Crates.io

文档 示例

用法

首先,将此内容添加到您的 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