相关疑难解决方法(0)

如何在Rust中选择未来和流?

我刚开始在Rust尝试期货/ tokio.我可以用期货或只用流来做基本的事情.我想知道如何在未来和流之间进行选择.

如何将tokio文档中的玩具问题扩展到用于tokio_timer::Timer执行定时HTTPS请求?

extern crate futures;
extern crate native_tls;
extern crate tokio_core;
extern crate tokio_io;
extern crate tokio_tls;

use std::io;
use std::net::ToSocketAddrs;

use futures::Future;
use native_tls::TlsConnector;
use tokio_core::net::TcpStream;
use tokio_core::reactor::Core;
use tokio_tls::TlsConnectorExt;

fn main() {
    let mut core = Core::new().unwrap();
    let handle = core.handle();
    let addr = "www.rust-lang.org:443".to_socket_addrs().unwrap().next().unwrap();

    let cx = TlsConnector::builder().unwrap().build().unwrap();
    let socket = TcpStream::connect(&addr, &handle);

    let tls_handshake = socket.and_then(|socket| {
        let tls = cx.connect_async("www.rust-lang.org", socket);
        tls.map_err(|e| {
            io::Error::new(io::ErrorKind::Other, e)
        })
    });
    let request = tls_handshake.and_then(|socket| { …
Run Code Online (Sandbox Code Playgroud)

future stream rust rust-tokio

4
推荐指数
1
解决办法
1934
查看次数

是否可以从文件创建流而不是将文件内容加载到内存中?

我目前正在使用rusoto_s3lib 将文件上传到 S3。我发现的所有示例都做同样的事情:打开一个文件,将文件的全部内容读入内存(Vec<u8>),然后将 Vec 转换为 a ByteStream(实现From<Vec<u8>>)。这是一个代码示例:

fn upload_file(&self, file_path: &Path) -> FileResult<PutObjectOutput> {
    let mut file = File::open(file_path)?;
    let mut file_data: Vec<u8> = vec![];
    file.read_to_end(&mut file_data)?;

    let client = S3Client::new(Region::UsEast1);
    let mut request = PutObjectRequest::default();
    request.body = Some(file_data.into());

    Ok(client.put_object(request).sync()?)
}
Run Code Online (Sandbox Code Playgroud)

这对于小文件来说可能是可以接受的,但是(我假设)一旦您尝试上传大小大于可用堆内存的文件,这种技术就会崩溃。

创建 a 的另一种方法ByteStream使用这个初始化器,它接受一个实现Streamtrait的对象。我认为这File会实现这个特性,但事实并非如此。

我的问题:

是否有某种类型可以从一个Filewhich 实现Stream?制作我自己的元组结构的正确解决方案是包装File和实现Stream自身吗,这个实现是微不足道的吗?有没有我没有看到的另一个解决方案,或者我只是误解了上面代码中的内存分配方式?

rust

4
推荐指数
1
解决办法
540
查看次数

如何将 Stream 转换为 Future?

我有一个异步Stream,我想从中获取第一个值。我怎样才能这样做呢?

use futures::Stream; // 0.3.5

async fn example<T>(s: impl Stream<Item = T>) -> Option<T> {
    todo!("What goes here?")
}
Run Code Online (Sandbox Code Playgroud)

asynchronous future stream rust async-await

4
推荐指数
1
解决办法
1111
查看次数

标签 统计

rust ×3

future ×2

stream ×2

async-await ×1

asynchronous ×1

rust-tokio ×1