问题标签 [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.
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
实现有什么问题......
asynchronous - 如何异步检索数据并使用基于 Tokio 的回显服务器对其进行修改?
我正在开发一个从 TCP 获取数据并将一些逻辑应用于该数据的回显服务器。例如,如果客户端数据按照hello
我想要的方式进入,则将其响应为hello from server
.
我可以使用该copy
功能转发输入数据,但这在我的情况下没有用。
这是我正在处理的起始代码:
我知道我需要添加一些逻辑而不是这个复制功能,但是如何?
stream - 如何每 N 秒从无界队列中提取消息并将它们生成到 Tokio 处理程序?
我试图每隔 N 秒从一个无界队列中提取消息(它们本身就是期货)并将它们生成到 Tokio 处理程序中。
我尝试了几十种变体,但似乎找不到正确的方法。看起来应该是可能的,但我总是遇到未来的类型不匹配或最终出现借用问题。
这是或多或少显示我想要的代码:
完整代码:
multithreading - 如何将 Tokio 线程池限制为一定数量的本机线程?
将 Tokio (v 0.1.11) 线程池限制为n
OS 本机线程的正确方法是什么,n
任意数字在哪里,最好在运行时配置?
据我所知,可以在单线程模式下使用 Tokio 使用 usingtokio_current_thread::block_on_all
而不是tokio::run
和tokio_current_thread::spawn
而不是tokio::spawn
.
我想要一个类似的解决方案,但对于n >= 1
.
asynchronous - 如何链接 tokio 读取功能?
有没有办法以“递归”方式链接read_*
函数?tokio::io
我基本上想做类似的事情:
read_until
x 然后read_exact
y 然后写响应然后回到顶部。
如果您对我在说什么功能感到困惑:https ://docs.rs/tokio/0.1.11/tokio/io/index.html
rust - Hyper 中的共享可变状态
我正在尝试在 Hyper Web 服务器中创建一个计数器,用于计算它收到的请求数。我正在使用 aArc<Mutex<u64>>
来保持计数。但是,我无法找出正确的组合move
并.clone()
满足闭包的类型。这是一些可以编译的代码,但会在每个请求上重置计数器:
rust - 为什么 tokio_core::reactor::Core 不执行生成的期货?
我希望这会打印到标准输出,但它没有发生。我是否spawn
以错误的方式使用?
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
?
这是一个完整的例子:
rust - 使用 Tokio 启动多个线程
我正在尝试创建一个基本的 tcp 服务器:
- 服务器应该能够向所有连接的客户端广播消息流
- 服务器应该能够接收来自所有客户端的命令并处理它们
这就是我的main
功能:
(操场)
我使用chat.rs
来自 tokio 存储库的示例作为基础。
我正在向server_tx
传入的 tcp 消息发送数据。
我遇到的麻烦是消费它们。
我正在使用“消费”传入消息流server_rx.for_each(|_| {
,现在,我如何告诉 tokio 运行它?
tokio::run
接受一个未来,但我有 2 个(可能更多)。我如何组合它们以使它们并行运行?
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]>
)
我怎样才能确定类型?任何 IDE 提示或技巧?(我正在使用带有 ide-rust 的 Atom)
我能以某种方式摆脱定义
impl Future<Item = (), Error = F::Error> where F: Future<Item = ()>
吗?我可以在
run
函数内部的某处定义完整类型,但在函数外部我想公开<Future<Item = (), Error = F::Error>>
或<Future<Item = (), Error = io::Error>>