问题标签 [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 投票
2 回答
259 浏览

asynchronous - 如何在期货中引入特征间接?

我有一个 tokio tcp 服务器,它应该将单个传入连接传递给服务。如何正确处理间接,以便服务器可以使用不同的服务实现?我求助于tokio::spawn()在服务内部调用,因为我找不到间接返回未来的方法。

这是我正在做的一个最小示例:

虽然这适用于间接,但我担心我tokio是否正确使用。每个Svc6impl 都必须调用tokio::spawn()而不是仅仅返回一个任务。如果服务器处理生成,我也更喜欢它,因为它可能需要处理优先级和排队。也很难测试不返回任何内容的方法。

这是我一直在尝试的其他事情的游乐场链接。要查看完整的上下文,请转到Samotop 源和接受 fn。

如果 trait 方法实现可以返回 impl Trait,那就太好了!

0 投票
1 回答
2830 浏览

tcp - 如何使用 Tokio 的 TcpStream 发送数据流?

我正在尝试在 Rust 中实现 TCP 客户端。我能够读取来自服务器的数据,但我无法发送数据。

这是我正在处理的代码:

如何添加异步数据发送功能?

0 投票
1 回答
1871 浏览

rust - 无法 tokio::run a boxed Future 因为 trait bound Send 不满足

我有一个函数可以选择运行未来或什么都不做,具体取决于参数。我尝试将 a 放在Box将返回的两个期货中,atokio::prelude::future::Done<Item=(), Error=()>立即解析为Ok(()),以及tokio::timer::Delay我正在使用and_thenandmap_err将两者都转换为Item和。当我尝试使用.Error()tokio::run

这无法编译并显示以下错误消息:

似乎Box<Future...>没有实现Send,这对我来说没有意义。由于Future我返回的类型都实现了Send,所以在我看来Box应该,因为impl Send for Box<T> where T: Send是标准库中的自动实现。我在这里想念什么?

0 投票
1 回答
1140 浏览

rust - 将未来结果转换为另一个未来

我有一个函数可以返回具有User特征的未来。我有它的两个具体实现:AnonymousUserBaseUser. 要获得BaseUser,在身份验证之后,我必须去数据库并获取它,这可能成功也可能不成功,并以正确的类型返回新的未来。我尝试了以下(操场):

这失败了,因为then函数的返回需要一个BaseUser

我尝试强制返回类型:

失败了:

我尝试使用Boxes 返工返工,这几乎奏效了(操场

失败了

所以我想这只是迫使两者成为相同的结果类型的问题

0 投票
1 回答
317 浏览

rust - 最小期货回调示例中的“预期生命周期参数”错误?

我正在尝试在 Rust 中构建一个非常基本的异步回调函数示例

这总是会导致编译器错误:

为什么首先会出现终身错误?为什么它只适用于Error而不适用于Item

我也不确定“帮助:考虑给它一个“静态生命周期”——AFAICT 这将导致整个程序执行过程中返回值的生命周期,这绝对不是我在更复杂的示例中想要的。

0 投票
2 回答
872 浏览

rust - 如何停止超 HTTP Web 服务器并返回错误?

hyper crate的文档有一个启动 Web 服务器的简单示例:

我想将此 Web 服务器嵌入到返回错误的过程中:

我不知道如何处理错误。而不是使用eprintln!()我想从run_and_stop_web_server函数返回错误。

0 投票
1 回答
120 浏览

rust - 如何在期货链中使用 Result 类型中包含的套接字?

我有以下来自 Tokio 文档的工作代码,我稍作修改:

文档中提到了

请注意,这res是一个Result包含原始套接字的。这允许我们在同一个套接字上对额外的读取或写入进行排序。

如何使用包含在套接字中的套接字Result向套接字写入数据?

0 投票
1 回答
1149 浏览

rust - 为什么 Tokio 的 Runtime::block_on_all 需要一个具有“静态生命周期”的未来?

在处理 Tokio 和期货时,传递给 Tokio 运行时的期货'static大部分时间都必须有生命周期。我理解这是因为未来可能会转移到另一个线程,在那里它可能会比它定义的地方更长寿。

有一种方法Runtime::block_on_all可以保证调用的未来将在调用结束时终止,它甚至返回运行这个未来的结果。

在那种情况下,我不明白(除了 Tokio 代码的简单性)为什么未来必须是'static.

任何人都可以对此有所了解吗?

0 投票
1 回答
1184 浏览

rust - 是否可以让 Future::and_then 有条件地返回不同的期货?

在我的代码的这个简化版本中,我有时想执行标记的行,有时不执行,可能会返回错误:

我想我可以用这样的东西替换这条线:

因为Error期货的部分是相同的,并且Item可以推断出部分。但是,它不起作用。我怎么能做到?

这是我得到的错误:

0 投票
3 回答
2572 浏览

rust - 如何测试绑定到 tokio TcpStream 的未来?

我有一个未来,它Framed使用LinesCodec.

当我尝试将其包装在测试中时,大约 20% 的时间会阻塞未来,但因为我没有在尝试连接的套接字上监听任何内容,所以我希望总是会收到错误消息:

这是我使用的测试代码:

操场

我在其他语言中看到了一些模式,其中测试二进制文件本身提供了一种异步返回结果的机制,但还没有找到在 Rust 中使用类似机制的好方法。