问题标签 [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 回答
513 浏览

rust - tokio::run() 和发送标记的编译错误

我正在尝试构建一个定义通用数据源的库,该数据源可以同步和异步地从各种源中提取数据。在构建异步片段时,我遇到了以下编译问题,我不知道如何解决:

这是我的简化代码(游乐场链接

我收到以下编译错误:

然而,在查看标准库时,我发现了以下实现:

  • impl<T: ?Sized> Send for Box<T> where T: Send
  • impl<T> Send for Option<T> where T: Send
  • impl<T> Send for Vec<T> where T: Send
  • impl Send for String
  • impl Send for [failure::]Error

我错过了什么?

如果我摆脱这个特征并替换它Box<Future<...>>impl Future<...>那么它就可以工作(新代码的游乐场链接);但我不明白特征和Box实现有什么问题......

0 投票
1 回答
443 浏览

asynchronous - 如何异步检索数据并使用基于 Tokio 的回显服务器对其进行修改?

我正在开发一个从 TCP 获取数据并将一些逻辑应用于该数据的回显服务器。例如,如果客户端数据按照hello我想要的方式进入,则将其响应为hello from server.

我可以使用该copy功能转发输入数据,但这在我的情况下没有用。

这是我正在处理的起始代码:

我知道我需要添加一些逻辑而不是这个复制功能,但是如何?

0 投票
1 回答
409 浏览

stream - 如何每 N 秒从无界队列中提取消息并将它们生成到 Tokio 处理程序?

我试图每隔 N 秒从一个无界队列中提取消息(它们本身就是期货)并将它们生成到 Tokio 处理程序中。

我尝试了几十种变体,但似乎找不到正确的方法。看起来应该是可能的,但我总是遇到未来的类型不匹配或最终出现借用问题。

这是或多或少显示我想要的代码:

完整代码:

操场

0 投票
1 回答
3373 浏览

multithreading - 如何将 Tokio 线程池限制为一定数量的本机线程?

将 Tokio (v 0.1.11) 线程池限制为nOS 本机线程的正确方法是什么,n任意数字在哪里,最好在运行时配置?

据我所知,可以在单线程模式下使用 Tokio 使用 usingtokio_current_thread::block_on_all而不是tokio::runtokio_current_thread::spawn而不是tokio::spawn.

我想要一个类似的解决方案,但对于n >= 1.

0 投票
1 回答
342 浏览

asynchronous - 如何链接 tokio 读取功能?

有没有办法以“递归”方式链接read_*函数?tokio::io

我基本上想做类似的事情:

read_untilx 然后read_exacty 然后写响应然后回到顶部。

如果您对我在说什么功能感到困惑:https ://docs.rs/tokio/0.1.11/tokio/io/index.html

0 投票
1 回答
951 浏览

rust - Hyper 中的共享可变状态

我正在尝试在 Hyper Web 服务器中创建一个计数器,用于计算它收到的请求数。我正在使用 aArc<Mutex<u64>>来保持计数。但是,我无法找出正确的组合move.clone()满足闭包的类型。这是一些可以编译的代码,但会在每个请求上重置计数器:

0 投票
1 回答
851 浏览

rust - 为什么 tokio_core::reactor::Core 不执行生成的期货?

我希望这会打印到标准输出,但它没有发生。我是否spawn以错误的方式使用?

0 投票
3 回答
695 浏览

rust - 如何获得 tokio::fs::File::open 的静态路径?

tokio::fs::File::open(path: T + 'static)需要其参数的'static生命周期。path

这是有道理的,因为它是在程序执行期间在运行时线程中处理的。我认为如果你可以通过自己的生命周期会更有意义,因为运行时不需要一直运行,所以你可以扔掉一些东西。我理解错了吗?

我现在想留下来'static,所以我的问题是......

我有一个trait TraitN和一些struct StructX { path: String, }有一个fn new(path: &String) -> Box<TraitN>new创建和self.path = path.to_string();设置.

在一些 impl fn doit(&self) { ... }for 中StructX,我想调用tokio::fs::File::open(&self.path).

我怎么能过&self.path一辈子'static

这是一个完整的例子:

操场

0 投票
1 回答
1778 浏览

rust - 使用 Tokio 启动多个线程

我正在尝试创建一个基本的 tcp 服务器:

  1. 服务器应该能够向所有连接的客户端广播消息流
  2. 服务器应该能够接收来自所有客户端的命令并处理它们

这就是我的main功能:

操场

我使用chat.rs来自 tokio 存储库的示例作为基础。
我正在向server_tx传入的 tcp 消息发送数据。
我遇到的麻烦是消费它们。
我正在使用“消费”传入消息流server_rx.for_each(|_| {,现在,我如何告诉 tokio 运行它?

tokio::run接受一个未来,但我有 2 个(可能更多)。我如何组合它们以使它们并行运行?

0 投票
1 回答
392 浏览

rust - 返回 Future 类型时无法推断类型 F

我正在尝试编写一个返回 a 的函数Future,所以按照Tokio 的教程,我想出了这个:

操场

我收到此错误:

我假设一旦我指定了完整的返回类型,错误就会消失,我什至无法弄清楚(我的 IDE 给了我<futures::MapErr<futures::stream::ForEach<tokio::timer::Interval, [closure@src/ir.rs:24:23: 38:14 self:_], std::result::Result<(), tokio::timer::Error>>, [closure@src/ir.rs:39:22: 39:65]>

  1. 我怎样才能确定类型?任何 IDE 提示或技巧?(我正在使用带有 ide-rust 的 Atom)

  2. 我能以某种方式摆脱定义impl Future<Item = (), Error = F::Error> where F: Future<Item = ()>吗?

    我可以在run函数内部的某处定义完整类型,但在函数外部我想公开<Future<Item = (), Error = F::Error>><Future<Item = (), Error = io::Error>>