问题标签 [rust-tokio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
867 浏览

rust - tokio-curl:将输出捕获到本地 `Vec` - 可能比借来的值更长

我还不太了解 Rust,无法理解生命周期和闭包......

尝试使用 tokio-curl 将下载的数据收集到向量中:

产生错误:


进一步调查,我发现这Easy::write_function需要'static生命周期,但是如何从 curl-rust 文档收集输出的示例使用Transfer::write_function改为使用:

Transfer::write_function不需要'static生命周期:

但我不能Transfer在 tokio-curl 上使用实例,Session::perform因为它需要Easy类型

transfer.easy是一个私有字段,直接传递给session.perform

这是 tokio-curl 的问题吗?也许它应该将该transfer.easy字段标记为公共或实现新功能,例如perform_transfer?还有另一种使用 tokio-curl 每次传输来收集输出的方法吗?

0 投票
1 回答
4075 浏览

rust - Asynchronously reconnecting a client to a server in an infinite loop

I'm not able to create a client that tries to connect to a server and:

  • if the server is down it has to try again in an infinite loop
  • if the server is up and connection is successful, when the connection is lost (i.e. server disconnects the client) the client has to restart the infinite loop to try to connect to the server

Here's the code to connect to a server; currently when the connection is lost the program exits. I'm not sure what the best way to implement it is; maybe I have to create a Future with an infinite loop?

Add the tokio-line crate with:

0 投票
1 回答
2381 浏览

rust - 如何在 tokio_core::io::Codec::decode(...) 中实现零拷贝?

我的目标是实现一个Codec将提供的内容排到EasyBuf消息边界并将其解码为仅引用内容的结构以防止不必要的复制。研究 的实现EasyBuf,目前似乎不可能,但也许我遗漏了一些东西。

这是我正在使用的代码,并且这样做实际上是tokio-cassandra所需要的:

锈游乐场

想法

  • 由于缺少生命周期,我认为目前无法做到这一点Codec::In- 我们必须声明它'static,这就是借用检查器的问题。
  • 可以通过返回自身EasyBufCodec::In = EasyBuf
  • 它也可以通过将索引解析到 EasyBuf 中来实现,并通过延迟生成具有引用的实际数据类型来实现。例如,字符串只是 a (usize, *const u8),稍后&str在用户请求时变为 a 。
0 投票
1 回答
2820 浏览

rust - 使用 tokio_timer 重复 Rust 任务

我正在使用 Tokio 框架在 Rust 中创建一个重复任务。以下代码基于完成的更改请求,以将此功能添加到 tokio-timer crate。

尝试编译时,我收到错误消息:

该错误表明 my_cron_func 函数的返回签名不正确。我需要更改/添加什么才能使签名正确以便编译?

0 投票
0 回答
671 浏览

rust - 在无限循环中将内容流式传输到远程服务器

我之前问过 我的最终解决方案是在无限循环中将客户端异步重新连接到服务器。这是我问题的第一部分,我无法解决第二部分。

我有一个无界通道,我需要将此通道接收到的数据流式传输到远程服务器。如果与远程服务器的连接丢失,那么我将重新启动它并重试来自同一通道的流数据。

我想到的解决方案是把 传递UnboundedReceiver给尝试连接服务器的方法,在这个方法中转发数据,UnboundedReceiver连接丢失时返回接收到的,这样死循环就可以重新取得 的所有权UnboundedReceiver并传递它再次循环方法。

如何UnboundedReceiver从我的send_data_to_remote_server()方法中返回它?

这是一个代码示例:

添加 tokio-line 板条箱:

0 投票
2 回答
3373 浏览

concurrency - 如何使用 Rust 和 Tokio 构建多个并发服务器?

我正在寻找使用 Rust 和 Tokio 在不同端口上构建多个并发服务器:

Tokio 是否有一个选项可以监听多个端口,还是我需要为每个端口创建一个简单的线程并Core::new()在每个端口中运行?

感谢rust-scoped-pool,我有:

rust-scoped-pool 是我发现执行多个线程并在生成它们后永远等待的唯一解决方案。我认为它有效,但我想知道是否存在更简单的解决方案。

0 投票
2 回答
3525 浏览

stream - 如何在 Rust 中的未来和流之间进行选择?

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

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

0 投票
1 回答
2390 浏览

ssl - Tokio Tls 自签名证书

更新:这似乎是正确生成和信任自签名证书的更多问题

我正在使用 tokio-rs 构建服务器和客户端。我一切正常,但现在正尝试将 SSL/TLS 添加到系统中。据我所知,我已经生成了一个自签名证书并正确安装了它,但是每次我尝试让客户端连接到服务器时,我都会收到以下错误:

我正在使用以下脚本来生成 crt、key 和 pfx 文件:

使用这个 conf 文件

pfx 文件上移一级,然后在构建时复制到调试文件夹中。

我正在运行 Ubuntu 并将 localhost.crt 复制到 /etc/ssl/certs 并将 localhost.key 复制到 /etc/ssl/private

我的服务器代码使用 tokio-proto 和 tokio-tls tokio-proto 服务器协议包装器

协议:

服务器:

客户端:(不使用 tokio-proto,仅使用本机 tls 和 TCP)

操作:

该项目还有更多文件,但我认为它们不相关,但是如果不清楚,我可以添加它们

0 投票
0 回答
174 浏览

linux - 用于传感器的基于 Tokio.rs 的 I2C 接口

我一直在阅读Tokio.rs以进行异步 IO,它似乎非常适合对传感器值流进行建模。但是,Tokio 很复杂,我不太明白如何将 I2C 传感器读取与 Tokio 接口。

我的具体任务是在BeagleBone Blue上实现对MPU9250的支持,我想利用 Tokio 来增加使接口更容易的组合器(能够加入传感器数据流以确保它们同时到达是其中之一我立即看到的优势)。

我能看到的最直接的方法是使用Tokio-Timer设置间隔并在计时器触发时读取传感器值。这是一个好的设计还是有更好的方法来做到这一点?我还应该提到我需要连接其他传感器,因此首选通用方法。

0 投票
3 回答
9469 浏览

rust - 如何阅读基于 Tokio 的 Hyper 请求的整个正文?

我想使用 Hyper 的当前 master 分支编写一个服务器,它保存由 POST 请求传递的消息并将此消息发送到每个传入的 GET 请求。

我有这个,主要是从 Hyper 示例目录中复制的:

如何将req.body()(似乎是 a Streamof Chunks)变成 a Vec<u8>?我想我必须以某种方式返回一个Future消耗Streama并将它变成一个单一的Vec<u8>,也许是fold(). 但我不知道该怎么做。