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

asynchronous - 从 tokio 套接字反序列化

我正在使用 tokio 来实现一个服务器,该服务器与使用 serde(bincode)序列化的消息进行通信。如果没有异步和期货,我会做

但我需要的是一个decode可以与异步套接字一起使用的函数

我唯一的想法是在编码期间手动将长度写入缓冲区,然后使用 read_exact:

有没有更好的方法来实现解码?

0 投票
1 回答
166 浏览

asynchronous - 如何在期货流中为每个项目发出 TcpClient 请求?

我有一个概念项目,其中客户端向服务器发送一个数字(PrimeClientRequest),服务器计算该值是否为素数,并返回一个响应(PrimeClientResponse)。我希望客户端是一个简单的 CLI,它提示用户输入一个数字,将请求发送到服务器,并显示响应。理想情况下,我想使用TcpClient来自 Tokio 和来自 Futures-Rs 的 Streams 来做到这一点。

我已经使用服务编写了一个 Tokio 服务器,我想为客户端重用codecproto

客户端的一部分是一个被调用的函数read_prompt,它返回一个Stream. 本质上,它是一个无限循环,每次迭代都会从stdin.

以下是相关代码:

main.rs

cli.rs

使用上面的代码,客户端在客户端终止之前向服务器发送一个请求。我希望能够使用生成的流向流中的每个项目read_prompt提供输入TcpClient并发出请求。我该怎么做呢?

完整的代码可以在joshleeb/tokio-prime找到。

0 投票
2 回答
739 浏览

asynchronous - 从 UdpSocket 异步读取

我正在尝试同时处理 Tokio 中到达的 UDP 数据包。但是,以下 MWE 并没有达到我的预期:

连接两个终端$ nc -u localhost 8080并发送一些文本,我可以看到来自第二个终端的消息在第一个终端完成后处理。

我必须改变什么?

0 投票
1 回答
105 浏览

asynchronous - 如果某些情况发生,则完成未来

如果通过 UDP 连接接收到某个值,我想创建一个完成的未来。

澄清一下,假设我发送一个 id 为 2 的 ping 并希望异步等待具有相同 id 的 pong。我的想法是使用类似的东西send_ping(endpoint, id) -> Future并与未来一起工作(例如将其传递给其他函数),知道它要么解析为匹配的 pong 要么解析为超时。

我的想法的草图:

这甚至可能吗?我找不到任何例子。

0 投票
1 回答
1136 浏览

rust - 东京回声服务器。不能在同一个未来读写

我正在尝试在 Tokio 中构建一个回显服务器。我见过一些例子,但它们似乎都使用io::copy了 Tokio IO,我不能使用,因为我想修改输出。

但是,我无法编译同时使用writer和的服务器reader。我想构建一个基于期货的任务,该任务可以循环读取/写入(回显服务器)。

我的实际代码是这样的:

您可能会说我必须使用Arc,因为涉及不同的线程。我已经尝试过Arcand Mutex,但是出现了另一个错误,我想不出办法让它编译:

它说的错误是:cannot move out of borrowed content

0 投票
1 回答
1484 浏览

rust - 使用 Hyper 同时获取多个 URL

我正在尝试调整超基本客户端示例以同时获取多个 URL。

这是我目前拥有的代码:

它似乎没有同时执行(需要很长时间才能完成),我是否以错误的方式将工作交给了核心?

0 投票
3 回答
1378 浏览

stream - 如何从流本身中取消无限流?

我试图interval_timer在清空队列后取消间隔(),但不确定什么是正确的策略。

drop按照 gitter 中的建议进行了尝试,但最终出现错误:

错误:

0 投票
1 回答
1412 浏览

asynchronous - 如何异步读取子进程输出

我想实现一个futures::Stream用于读取和解析子子进程的标准输出的方法。

我现在在做什么:

  • 生成子进程并通过std::process方法获取其标准输出:let child = Command::new(...).stdout(Stdio.pipe()).spawn().expect(...)

  • 添加AsyncReadBufRead到标准输出:

    /li>
  • 为标准输出声明一个包装结构:

    /li>
  • 实施Stream

    /li>

问题是它AllowStdIo不会ChildStdout神奇地异步并且self.io.read_line调用仍然阻塞。

我想我需要传递一些不同的东西而不是Stdio::pipe()让它异步,但是什么?或者有不同的解决方案吗?

这个问题不同于What is the best approach to 在 future-rs 中封装阻塞 I/O?因为我想为子进程的特定情况获取异步I/O,而不是解决同步I/O的封装问题。

更新:我正在使用tokio = "0.1.3"它的运行时功能,目前使用tokio-process不是一个选项(https://github.com/alexcrichton/tokio-process/issues/27

0 投票
2 回答
2796 浏览

rust - 如何在 Tokio 中安排重复任务?

我正在用使用 Tokio 的异步等效代码替换用 Rust 编写的同步套接字代码。Tokio 使用 futures 进行异步活动,因此任务被链接在一起并排队到执行程序上,以由线程池执行。

我想做的基本伪代码是这样的:

这个伪代码只会执行我的任务一次。我如何连续运行它?我希望它执行,然后一次又一次地执行等等。我只希望它在恐慌或有错误结果代码时停止执行。最简单的方法是什么?

0 投票
2 回答
1463 浏览

rust - 如何在 #[no_std] 环境中使用 Tokio Reactor?

我正在尝试在 Tock OS 嵌入式操作系统上实现期货。我正在尝试在环境中使用Tokio 。#[no_std]

我的Cargo.toml文件如下所示:

这编译没有错误,但是当我添加时tokio-reactor = "0.1.1",我得到了错误:error[E0463]: can't find crate for std。我知道这是因为 Tokio 从 std 库中导入了一些东西。

有可能解决这个问题吗?