问题标签 [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.
asynchronous - 如何在期货中引入特征间接?
我有一个 tokio tcp 服务器,它应该将单个传入连接传递给服务。如何正确处理间接,以便服务器可以使用不同的服务实现?我求助于tokio::spawn()
在服务内部调用,因为我找不到间接返回未来的方法。
这是我正在做的一个最小示例:
虽然这适用于间接,但我担心我tokio
是否正确使用。每个Svc6
impl 都必须调用tokio::spawn()
而不是仅仅返回一个任务。如果服务器处理生成,我也更喜欢它,因为它可能需要处理优先级和排队。也很难测试不返回任何内容的方法。
这是我一直在尝试的其他事情的游乐场链接。要查看完整的上下文,请转到Samotop 源和接受 fn。
如果 trait 方法实现可以返回 impl Trait,那就太好了!
tcp - 如何使用 Tokio 的 TcpStream 发送数据流?
我正在尝试在 Rust 中实现 TCP 客户端。我能够读取来自服务器的数据,但我无法发送数据。
这是我正在处理的代码:
如何添加异步数据发送功能?
rust - 无法 tokio::run a boxed Future 因为 trait bound Send 不满足
我有一个函数可以选择运行未来或什么都不做,具体取决于参数。我尝试将 a 放在Box
将返回的两个期货中,atokio::prelude::future::Done<Item=(), Error=()>
立即解析为Ok(())
,以及tokio::timer::Delay
我正在使用and_then
andmap_err
将两者都转换为Item
和。当我尝试使用.Error
()
tokio::run
这无法编译并显示以下错误消息:
似乎Box<Future...>
没有实现Send
,这对我来说没有意义。由于Future
我返回的类型都实现了Send
,所以在我看来Box
应该,因为impl Send for Box<T> where T: Send
是标准库中的自动实现。我在这里想念什么?
rust - 最小期货回调示例中的“预期生命周期参数”错误?
我正在尝试在 Rust 中构建一个非常基本的异步回调函数示例:
这总是会导致编译器错误:
为什么首先会出现终身错误?为什么它只适用于Error
而不适用于Item
?
我也不确定“帮助:考虑给它一个“静态生命周期”——AFAICT 这将导致整个程序执行过程中返回值的生命周期,这绝对不是我在更复杂的示例中想要的。
rust - 如何停止超 HTTP Web 服务器并返回错误?
hyper crate的文档有一个启动 Web 服务器的简单示例:
我想将此 Web 服务器嵌入到返回错误的过程中:
我不知道如何处理错误。而不是使用eprintln!()
我想从run_and_stop_web_server
函数返回错误。
rust - 如何在期货链中使用 Result 类型中包含的套接字?
我有以下来自 Tokio 文档的工作代码,我稍作修改:
请注意,这
res
是一个Result
包含原始套接字的。这允许我们在同一个套接字上对额外的读取或写入进行排序。
如何使用包含在套接字中的套接字Result
向套接字写入数据?
rust - 为什么 Tokio 的 Runtime::block_on_all 需要一个具有“静态生命周期”的未来?
在处理 Tokio 和期货时,传递给 Tokio 运行时的期货'static
大部分时间都必须有生命周期。我理解这是因为未来可能会转移到另一个线程,在那里它可能会比它定义的地方更长寿。
有一种方法Runtime::block_on_all
可以保证调用的未来将在调用结束时终止,它甚至返回运行这个未来的结果。
在那种情况下,我不明白(除了 Tokio 代码的简单性)为什么未来必须是'static
.
任何人都可以对此有所了解吗?
rust - 是否可以让 Future::and_then 有条件地返回不同的期货?
在我的代码的这个简化版本中,我有时想执行标记的行,有时不执行,可能会返回错误:
我想我可以用这样的东西替换这条线:
因为Error
期货的部分是相同的,并且Item
可以推断出部分。但是,它不起作用。我怎么能做到?
这是我得到的错误:
rust - 如何测试绑定到 tokio TcpStream 的未来?
我有一个未来,它Framed
使用LinesCodec
.
当我尝试将其包装在测试中时,大约 20% 的时间会阻塞未来,但因为我没有在尝试连接的套接字上监听任何内容,所以我希望总是会收到错误消息:
这是我使用的测试代码:
我在其他语言中看到了一些模式,其中测试二进制文件本身提供了一种异步返回结果的机制,但还没有找到在 Rust 中使用类似机制的好方法。