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

sockets - 如何检测到客户端已使用 mio 0.6 关闭了套接字?

我想要一种方法来检测客户端已经关闭了套接字,所以我可以deregister这样做,但我找不到任何合适的方法来做到这一点。

我的问题类似于Detecting client hangup in MIO,但有两个主要区别:

  1. 我需要一个跨平台的解决方案。根据 mio 0.6 的源代码,hup是 UNIX-only 的东西,我的代码应该也可以在 Windows 上运行。

  2. 自 0.3 以来,mio 的 API 发生了巨大变化。

0 投票
2 回答
383 浏览

multithreading - 如何将 discord-rs 事件与来自 Twitter 或计时器的其他事件结合起来?

我使用discord-rs库为 Discord 聊天服务编写了一个机器人。当它们出现在主循环中的单个线程中时,该库会为我提供事件:

我想添加一些计时器和其他在他们自己的线程中计算的东西,它们必须通知我在主循环的线程中做一些事情。我还想添加 Twitter 支持。所以它可能看起来像这样:

这看起来像这样:

在原始的 C 和 C 套接字中,可以通过 (e) 轮询它们来完成,但在这里我不知道如何在 Rust 中做到这一点,甚至是否可能。我想我想要一些poll不同的来源,它们可以为我提供不同类型的对象。

我想如果我为 mio 的 trait 提供一个包装器并按照示例Evented中的描述使用 mio 的民意调查,这可以实现。Deadline

有没有办法结合这些事件?

0 投票
0 回答
240 浏览

rust - 为什么 Box 不会自动调整大小?

我正在尝试使用 Mio 和反应器模式来实现服务器。我希望我Reactor同时处理TcpListenersTcpStreams,所以在这里抽象是我真正的挑战。

我有一个特性ReAgent,它实现了各种处理程序来通知Reactor状态的变化,同时Reactor通知每个人ReAgent关于那个重要的事件ReAgent。反过来,我将有两种不同的ReAgent类型,一种用于接受 ( TcpListeners),它会生成客户端 ( TcpStreams) 以传递回Reactor事件处理。Reactor用于多个服务器端点的非常标准的模式;在我的职业生涯中,我已经用 C/C++ 编写了六个这样的代码。删除有关 myTokenPool等的详细信息,这就是我头疼的地方:

当我编译这个时,我得到:

...我根本不明白。这是一个Box。ABox在编译时具有已知的常量大小。这就是使用Box支持动态类型对象的全部意义,对吧?客户端具有已知大小,它是ReAgent.

我错过了什么?

我知道我可能需要RefCell稍后再使用,因为我正在改变ReAgent以设置其轮询令牌;那是以后的事,我只是想过去。

0 投票
1 回答
257 浏览

rust - Mio 在零持续时间超时的轮询中的行为是什么?

根据mio::Poll文档

该函数将阻塞,直到至少收到一个就绪事件或超时已过。None 的超时意味着 poll 将阻塞,直到收到准备就绪事件。...注意超时会向上取整到系统时钟粒度(通常为1ms),内核调度延迟意味着阻塞间隔可能会被少量溢出。

同时,Linux 的select()零超时特性

如果 timeval 结构的两个字段都为零,则 select() 立即返回。(这对于轮询很有用。)

Mio 在 a 上的行为是什么Duration::from_secs(0),它会像 Linux 那样工作select()吗?

0 投票
0 回答
401 浏览

rust - 为什么接受后第一次写入 Mio 的 TcpStream 会给出“操作会阻塞”错误?

使用此代码:

whereunwrap_or_continue!只是continue在报告错误时发生错误,我收到此错误:

为什么它会阻塞,套接字刚刚被接受并且是第一次写入?

0 投票
1 回答
209 浏览

rust - 为什么 Mio 的民意调查会针对用户生成的事件触发两次?

以下代码生成一个“用户事件”,由以下代码返回poll

输出是:

在 Mio 存储库上打开了一个问题

0 投票
1 回答
3373 浏览

multithreading - 如何将 Tokio 线程池限制为一定数量的本机线程?

将 Tokio (v 0.1.11) 线程池限制为nOS 本机线程的正确方法是什么,n任意数字在哪里,最好在运行时配置?

据我所知,可以在单线程模式下使用 Tokio 使用 usingtokio_current_thread::block_on_all而不是tokio::runtokio_current_thread::spawn而不是tokio::spawn.

我想要一个类似的解决方案,但对于n >= 1.

0 投票
0 回答
539 浏览

sockets - 尝试使用 ws-rs (mio) 连接到 https websocket 时出现“资源暂时不可用”

我正在尝试使用 Rust ws-rs(基于 mio)建立安全连接。

我认为相关的代码部分:

一个完整的例子是在Github上,大约 150 行,这是我能得到的最小的。

我收到此错误:

我真的不知道那是什么意思...

(上个月我还创建了一个 ws-rs Github问题,因为我认为这可能是库或示例的问题)

0 投票
1 回答
523 浏览

rust - 向 mio 注册频道

在旧版本的 mio 文档中,我找到了 mio::channel,它似乎用于创建EventedFd可以注册的通道实现Poll。我还在 reddit 上看到,这被改变为有利于其他东西,但我无法弄清楚注册频道的新方法是什么。

std::sync::mpsc迄今为止,使用 mio 在频道(或其他东西)上等待的当前方式是什么?我在谷歌上只能找到旧版本的 mio 文档的链接。谢谢 !

当我遇到同样的问题时,我希望我提供一些代码以使问题更容易理解:

到目前为止,我尝试不使用 mio,但问题很明显:您希望阻塞直到关闭通道消息到达或侦听器套接字发出信号。有足够的动力转向mio。除非 mio 无法等待Receiver.

0 投票
0 回答
48 浏览

rust - DCCP 在 Rust 中对 mio 的支持

我正在做一个关于 DCCP 协议的分布式系统项目。所以目的是让每个节点能够通过DCCP协议与所有其他节点进行通信。我知道我可以使用数据结构来维护所有已建立的套接字。但是我想要一个更加异步的解决方案,这样只需要一个线程来处理来自所有套接字的所有消息事件。似乎 tokio 和 mio crate 只实现异步 TCP 和 UDP 数据类型。我想知道是否有办法让它也适用于 DCCP。提前致谢!