问题标签 [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.
sockets - 如何检测到客户端已使用 mio 0.6 关闭了套接字?
我想要一种方法来检测客户端已经关闭了套接字,所以我可以deregister
这样做,但我找不到任何合适的方法来做到这一点。
我的问题类似于Detecting client hangup in MIO,但有两个主要区别:
我需要一个跨平台的解决方案。根据 mio 0.6 的源代码,
hup
是 UNIX-only 的东西,我的代码应该也可以在 Windows 上运行。自 0.3 以来,mio 的 API 发生了巨大变化。
multithreading - 如何将 discord-rs 事件与来自 Twitter 或计时器的其他事件结合起来?
我使用discord-rs库为 Discord 聊天服务编写了一个机器人。当它们出现在主循环中的单个线程中时,该库会为我提供事件:
我想添加一些计时器和其他在他们自己的线程中计算的东西,它们必须通知我在主循环的线程中做一些事情。我还想添加 Twitter 支持。所以它可能看起来像这样:
这看起来像这样:
在原始的 C 和 C 套接字中,可以通过 (e) 轮询它们来完成,但在这里我不知道如何在 Rust 中做到这一点,甚至是否可能。我想我想要一些poll
不同的来源,它们可以为我提供不同类型的对象。
我想如果我为 mio 的 trait 提供一个包装器并按照示例Evented
中的描述使用 mio 的民意调查,这可以实现。Deadline
有没有办法结合这些事件?
rust - 为什么 Box 不会自动调整大小?
我正在尝试使用 Mio 和反应器模式来实现服务器。我希望我Reactor
同时处理TcpListeners
和TcpStreams
,所以在这里抽象是我真正的挑战。
我有一个特性ReAgent
,它实现了各种处理程序来通知Reactor
状态的变化,同时Reactor
通知每个人ReAgent
关于那个重要的事件ReAgent
。反过来,我将有两种不同的ReAgent
类型,一种用于接受 ( TcpListeners
),它会生成客户端 ( TcpStreams
) 以传递回Reactor
事件处理。Reactor
用于多个服务器端点的非常标准的模式;在我的职业生涯中,我已经用 C/C++ 编写了六个这样的代码。删除有关 myTokenPool
等的详细信息,这就是我头疼的地方:
当我编译这个时,我得到:
...我根本不明白。这是一个Box
。ABox
在编译时具有已知的常量大小。这就是使用Box
支持动态类型对象的全部意义,对吧?客户端具有已知大小,它是ReAgent
.
我错过了什么?
我知道我可能需要RefCell
稍后再使用,因为我正在改变ReAgent
以设置其轮询令牌;那是以后的事,我只是想过去。
rust - Mio 在零持续时间超时的轮询中的行为是什么?
根据mio::Poll
文档:
该函数将阻塞,直到至少收到一个就绪事件或超时已过。None 的超时意味着 poll 将阻塞,直到收到准备就绪事件。...注意超时会向上取整到系统时钟粒度(通常为1ms),内核调度延迟意味着阻塞间隔可能会被少量溢出。
同时,Linux 的select()
零超时特性:
如果 timeval 结构的两个字段都为零,则 select() 立即返回。(这对于轮询很有用。)
Mio 在 a 上的行为是什么Duration::from_secs(0)
,它会像 Linux 那样工作select()
吗?
rust - 为什么接受后第一次写入 Mio 的 TcpStream 会给出“操作会阻塞”错误?
使用此代码:
whereunwrap_or_continue!
只是continue
在报告错误时发生错误,我收到此错误:
为什么它会阻塞,套接字刚刚被接受并且是第一次写入?
multithreading - 如何将 Tokio 线程池限制为一定数量的本机线程?
将 Tokio (v 0.1.11) 线程池限制为n
OS 本机线程的正确方法是什么,n
任意数字在哪里,最好在运行时配置?
据我所知,可以在单线程模式下使用 Tokio 使用 usingtokio_current_thread::block_on_all
而不是tokio::run
和tokio_current_thread::spawn
而不是tokio::spawn
.
我想要一个类似的解决方案,但对于n >= 1
.
sockets - 尝试使用 ws-rs (mio) 连接到 https websocket 时出现“资源暂时不可用”
我正在尝试使用 Rust ws-rs
(基于 mio)建立安全连接。
我认为相关的代码部分:
一个完整的例子是在Github上,大约 150 行,这是我能得到的最小的。
我收到此错误:
我真的不知道那是什么意思...
(上个月我还创建了一个 ws-rs Github问题,因为我认为这可能是库或示例的问题)
rust - 向 mio 注册频道
在旧版本的 mio 文档中,我找到了 mio::channel,它似乎用于创建EventedFd
可以注册的通道实现Poll
。我还在 reddit 上看到,这被改变为有利于其他东西,但我无法弄清楚注册频道的新方法是什么。
std::sync::mpsc
迄今为止,使用 mio 在频道(或其他东西)上等待的当前方式是什么?我在谷歌上只能找到旧版本的 mio 文档的链接。谢谢 !
当我遇到同样的问题时,我希望我提供一些代码以使问题更容易理解:
到目前为止,我尝试不使用 mio,但问题很明显:您希望阻塞直到关闭通道消息到达或侦听器套接字发出信号。有足够的动力转向mio。除非 mio 无法等待Receiver
.
rust - DCCP 在 Rust 中对 mio 的支持
我正在做一个关于 DCCP 协议的分布式系统项目。所以目的是让每个节点能够通过DCCP协议与所有其他节点进行通信。我知道我可以使用数据结构来维护所有已建立的套接字。但是我想要一个更加异步的解决方案,这样只需要一个线程来处理来自所有套接字的所有消息事件。似乎 tokio 和 mio crate 只实现异步 TCP 和 UDP 数据类型。我想知道是否有办法让它也适用于 DCCP。提前致谢!