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

rust - 为什么在使用 Tokio 的 frame_delimited 时会出现 FrameTooBig 错误?

我正试图用 Tokio 弄湿我的脚。当我从 Telnet 连接发送消息时,我得到Custom { kind: InvalidData, error: FrameTooBig }. 我不明白这个问题,也不知道如何克服它。

客户端:

0 投票
1 回答
3679 浏览

multithreading - 是否可以在当前线程中对 Tokio 的当前线程进行工作?

我想在foo执行器内部生成一个任务current_thread

当我运行它时,它失败了:

我尝试传递current_threadfoo但无法编译。是否有可能做到这一点,如果可以,怎么做?

0 投票
1 回答
2642 浏览

rust - 如何使用 tokio 的 UdpSocket 处理 1 个服务器中的消息:N 个客户端设置?

我想做的事:

...编写一个(1)个服务器/(N)个客户端(网络游戏)架构,它使用 UDP 套接字作为通信的底层基础。

  • 消息发送为,通过(crate)Vec<u8>编码bincode

  • 我还希望能够偶尔发送可能超过MTU~ 的典型最大值的数据报,1500 bytes并在接收端正确组装,包括发送ack-messages 等。(我假设我必须自己实现,对吧?)

对于UdpSocket我想过使用tokio的实现,也许framed。我不确定这是否是一个不错的选择,因为这似乎会引入一个不必要的映射步骤Vec<u8>(由 序列化bincode)到Vec<u8>(由 需要UdpCodectokio(?)

考虑这个最小的代码示例:

Cargo.toml (服务器)

Serde并且serde-derive用于shared定义协议的 crate 中!)

(我想尽快tokio-core更换tokio

这里的问题是:

let udp_future = socket.framed(MyCodec {}).for_each(|(addr, data)| { | ------ 移到这里的值 ^^^^^^^^^^^^^ 之后捕获到这里的值move | = 注意: move 发生是因为socket有 type tokio_core::net::UdpSocket,它没有实现Copytrait

该错误完全有道理,但我不确定如何创建如此简单的回显服务。实际上,消息的处理涉及到更多的逻辑,但为了一个最小的例子,这应该足以给出一个粗略的想法。

我的解决方法是一个丑陋的黑客:创建第二个套接字。

0 投票
1 回答
1192 浏览

asynchronous - 使用 Rust 期货运行异步可变操作

我正在使用 tokio-rs 在 Rust 中构建一个服务,并且到目前为止对这个技术堆栈很满意。我现在正在尝试链接包括写入在内的异步操作,并且很难使用借用检查器。

我简化的最小代码示例是这样的:

作为一个简短的总结,在异步准备步骤之后,我尝试运行另一个异步操作,该操作写入self. 如果没有可变性,这很容易与普通Rc成员一起使用,但可变性会破坏它,产生以下错误:

我希望这应该可行,我看不到可变引用仍然在哪里借用。我认为process()应该在返回未来后释放处理器&mut self,所以不应该发生编译错误。

你能解释一下根本原因吗?这个例子应该如何改变才能被编译器接受?

0 投票
1 回答
326 浏览

rust - 如何向 tokio-io 添加特殊的 NotReady 逻辑?

我正在尝试制作一个Stream等到特定字符在缓冲区中的情况。我知道有read_until()BufRead但我实际上需要一个自定义解决方案,因为这是实现等待直到缓冲区中的特定字符串(或者,例如,发生正则表达式匹配)的垫脚石。

在我第一次遇到问题的项目中,问题是当我Ready(_)从内部未来得到一个并NotReady从我的函数返回时,未来的处理只是挂起。我发现我不应该按照文档(最后一段)这样做。但是,我没有得到的是那段中承诺的实际替代方案。我阅读了 Tokio 网站上所有已发布的文档,目前对我来说没有意义。

所以以下是我当前的代码。不幸的是,我不能让它更简单更小,因为它已经坏了。目前的结果是这样的:

预期的结果是从中得到一些结果Ok(Ready(_)),同时打印Wand W',并等待缓冲区中的特定字符。

这是完整的示例项目

0 投票
1 回答
412 浏览

rust - 尝试使用 Tokio 实现嵌套并发时“无法递归调用‘Core’”

我正在构建一个定期发出 HTTP 请求的服务。我tokio::timer::Delay用作定期触发器和超级来进行 HTTP 调用。

一起使用它们会给我以下错误:

我怎样才能使这项工作?

以下是该服务的简化版本。

main.rs

货运.toml

0 投票
2 回答
2906 浏览

rust - 如何使用 Tokio 从 TcpStream 读取单个数据包?

我正在尝试使用 tokio 接收单个数据包:

此代码打印一个空包。如何更改此代码以打印接收到的数据包?

0 投票
1 回答
5158 浏览

rust - 在盒装的未来使用参考变量时“需要显式生命周期”

我正在尝试使用在中创建的结构main()并将其传递给返回 boxed 的函数Future。但是,我遇到了生命周期和借贷问题,似乎无法干净地解决这个问题。

这是我的结构和功能:

编译时出现以下错误:

我想发生错误是因为SomeStruct在s 范围内Future使用并且可能在main()s 范围之外使用,因此编译器要求我将生存期更改为'static. 这是我到目前为止尝试的(不成功):

  • 将生命周期更改'static为编译器建议的,这会在main().
  • val按照编译器的建议添加移动ok(20).and_then(move |val| {,这会在第二次调用get_future().
  • 使用lazy_static板条箱显式初始化SomeStruct为静态(如此处所建议),但是我在尝试时遇到了宏错误。

整个例子可以在这里找到。我省略了一些细节来创建一个最小的例子。使用tokio-core和会出现问题futures = "0.1"。不幸的是,由于依赖另一个库,迁移到版本"0.2"不是一种选择。

0 投票
2 回答
15762 浏览

rust - 如何使用 reqwest 执行并行异步 HTTP GET 请求?

异步示例很有用,但作为 Rust 和 Tokio 的新手,我正在努力研究如何一次执行 N 个请求,使用来自向量的 URL,并为每个 URL 创建一个响应 HTML 的迭代器作为字符串。

怎么可能做到这一点?

0 投票
0 回答
77 浏览

rust - 在 Tokio 中向非线程安全的单例对象分派请求

我想围绕来自第三方库的对象创建一个包装器,然后通过 Tokio 将源自 TCP 套接字的请求分派给它。在 Tokio 有没有一种惯用的方法来处理这个问题?


从概念上讲,界面如下所示:

有几点需要注意:

  1. 该对象不是线程安全的,因此需要对请求进行序列化
  2. 请求处理程序可能需要很长时间,因此在与 Tokio 事件循环的其余部分相同的线程上运行它们可能不是一个好主意

我可以启动一个常规的操作系统线程并通过队列提供它,但在这种情况下,我需要将不同类型的请求多路复用到它上面(然后将响应多路分解回套接字)。是否有一些我可以重复使用的现有管道?

一个延伸目标是在它们之间有一个MyObjects 池和负载平衡请求。