问题标签 [mio]

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 回答
282 浏览

rust - 如何使用 Tokio 编写异步方法?

我正在尝试编写一个连接到远程服务器并交换数据的库。我在 C++ 中使用 Boost::Asio 做到了这一点,并试图用 Rust 做同样的事情。

我遇到的问题之一是从 Asio 映射概念,例如 async_write/read 到 Tokio,首先是看似所有 Tokio 示例都要求我用 替换 my main()async main()而我想将所有异步代码封装在结构中并关联实施。

是否可以在不更换的情况下使用 Tokio main()?也许是mio唯一的方法?

0 投票
0 回答
59 浏览

rust - mio 什么时候做 epoll 实例?

我想创建一个 Web 服务器来监听 3 个 TCP 连接并从每个连接中读取数据。我正在通过一个for循环建立这些联系。

我的理解是会有三个不同的 epoll 实例,每个连接一个。这是否意味着有三个线程被阻塞在监听三个单独的 epoll 实例?这将如何工作?我不确定内核如何读取三个 epoll 实例并在其中一个接收数据时返回一个标志。

0 投票
1 回答
327 浏览

asynchronous - 将同步 Rust IO 驱动程序转换为 `async`

我有一个UIO 驱动程序,它在一个所谓的wait_on_complete函数中轮询文件描述符以等待中断。这是完全同步的,所以会阻塞(有超时)。我想迁移这样的代码wait_on_completeasync或者可以很容易地包装以创建有用的Future),但我不确定最好的策略。

我对选项的想法是:

  1. Use mio::Poll,据我了解,这意味着使用 Tokio 反应器,但我无法在 Tokio ^0.3 中遵循 API。在 Tokio 0.2 中似乎有一些东西,但它们已经消失了(尽管它似乎仍然在代码中 - 这只是缺少文档吗?)。
  2. 使用polling它自己的反应器附带的东西。问题是驱动程序似乎是反应堆的错误位置。
  3. 在自己的线程中运行同步代码并与async通道通信。鉴于其中一个要点async是正确集成异步 IO,这在架构上似乎是一个糟糕的选择(实际上,IO 非常适合主状态机)。
  4. 还有一些我不知道的。

(1) 似乎是显而易见的解决方案,但我并不完全清楚如何去做。是否有一些关于创建自己的mio设备并在 Tokio 运行时中使用它的最新文档?

还有其他我想做的事情错过的方法吗?我是否在考虑中遗漏了什么?

0 投票
1 回答
69 浏览

networking - Rust 所有权问题

我对 Rust 很陌生,我主要是 C#、javascript 和 python 开发人员,所以我喜欢以 OOP 方式处理事情,但是我仍然无法理解 rust 的所有权。尤其是在涉及 OOP 时。

我正在编写一个 TCP 服务器。我有一个包含连接(流)的结构,我使用 mio crate 异步读取套接字。我明白错误告诉我什么,但我不知道如何解决它。我尝试将 read_message 方法更改为一个函数(没有对 self 的引用),它起作用了,但问题是我需要从结构访问连接和诸如此类的东西(例如,在套接字之间中继消息),所以这个解决方法在以后的版本中是不合理的。有没有简单的解决方法,还是设计本身就有缺陷?

这是一个片段,显示了我的问题:

我得到的错误如下: 在此处输入图像描述

0 投票
0 回答
22 浏览

struct - Rust + mio:在结构字段中存储 TcpStream 时得到“移动发生值,因为”

我想使用结构实现 TCP 客户端:

但我得到一个错误:

我怎样才能解决这个问题 ?

0 投票
1 回答
25 浏览

rust - Rust + mio tcp 客户端:连接类型需要显式生命周期

我想使用 mio 实现 tcp 客户端。这是我的代码:

和我的身份验证处理程序的代码:

编译时出现错误“错误[E0621]:连接类型需要显式生命周期”:

如何解决?从我的角度来看,我不确定static生命周期是否可以,因为我想在经过身份验证和登录后破坏连接。