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

rust - 如何在同一个 MIO 事件循环中创建 TcpSocket 和 TcpStream?

我可以创建相同的服务器ServerClient使用不同的套接字吗?

喜欢A -> B -> C

这里,A 是服务器 B 的客户端,B 是 A 的服务器,但是服务器 C 的客户端。

如何在同一个MIO event_loop中注册这两个?

0 投票
0 回答
828 浏览

rust - 如何从超时的 mio TcpStream 中读取?

我正在使用Miocomio::net::tcp::TcpStream没有实现Clone,所以似乎不可能TcpStream跨多个线程/协程共享 a (或者如果可能的话,我不确定如何;我对 Rust 很陌生)。因此,我假设要同时读取/写入单个TcpStream,有必要使用单个协程来进行读取和写入。

为了避免在传入数据不频繁时无限期地阻塞读取,似乎有必要在从TcpStream. std::net::TcpStream已经set_read_timeout实现了这一点,但我找不到mio::net::tcp::TcpStream. 我该怎么办?或者有没有办法TcpStream在多个协程之间共享 mio,避免超时?

0 投票
1 回答
266 浏览

linux - MIO EventLoop 没有为 TcpStream 运行

我是一名正在努力解决异步 IO 问题的 Rust 初学者。我决定使用mio

我已经阅读了一些源代码+教程,但仍然有一些我不明白的基本部分。我正在使用netcat -k -l 127.0.0.1 9999. 然后我用cargo(下面的代码)运行简单的测试。我期待看到“准备好”或“滴答”的恐慌。但它永远不会发生,测试会永远运行。

0 投票
1 回答
203 浏览

rust - 如何在 hashmap 字段中保存对处理程序的引用

我正在学习 Rust 并尝试编写一个 websocket 服务器。逻辑如下: WSConnectionFactory 创建 WSHandler 处理传入消息并根据任意规则将它们发送给其他客户端。问题是我不知道如何实现这种行为。

限制:我无法更改 Factory 和 Handler 特征的签名,因为它们是由ws-rs库提供的。

问题:如何使用 RefCell/Cell 实现这一点?

0 投票
1 回答
167 浏览

rust - 如何处理mio中的错误?

我正在 mio 之上构建一个多线程异步 HTTP 服务器。

我应该如何处理客户端TcpStream连接上的事件?

  • 因为is_readable它非常简单:我阅读请求并编写响应。
  • 对于其他类型我不确定。shutdown()如果我得到is_error或,我应该流is_hup吗?怎么样is_none()
0 投票
1 回答
353 浏览

rust - 负载测试后,每个新的 mio 连接都会立即挂断

我使用 mio 在 Rust 中编写了一个多线程异步 HTTP 服务器。当我运行负载测试(使用围攻)时,服务器在第一次负载测试时工作正常,但是当负载测试完成时,对服务器的所有请求都开始失败。

使用一些日志记录,我注意到我获得的每个新连接都会accept()立即收到一个挂断事件。服务器连接本身不会收到任何错误或挂断事件。

我在 OS X 10.11 El Capitan 上运行 Rust 1.12.0 和 mio 0.6

这是我的服务器的主要事件循环:

GitHub 上提供了我正在使用的示例 webapp 的完整代码。

负载测试命令:

0 投票
0 回答
215 浏览

rust - 我可以在多个 mio Poll 对象上注册一个 TcpListener 吗?

我可以TcpListener在多个 mioPoll对象上注册相同的对象(Poll多线程服务器的每个线程一个)吗?

当我尝试时,我收到错误:

线程'main'在'调用Result::unwrap()一个Err 值时惊慌失措:错误{repr:自定义(自定义{种类:其他,错误:StringError(“套接字已注册”)})}',src/libcore/result.rs:788

这是预期的行为吗?

0 投票
0 回答
278 浏览

unicode - 如何从 mio 事件循环中的无缓冲文件中读取 Unicode 代码点?

我想使用 mio crate 来读取按键,因为它们以无缓冲的方式到达。我已经有了取消缓冲标准输入的代码,并且已经搭建了事件循环的脚手架:

如何实现标记的部分XXX?有几个挑战:

  • 我怎么知道要读取多少字节?我不确定mio会告诉我这个。
  • 如何处理部分代码点,其中读取跨越多字节字符。

一种可行的解决方案是使用oneshot事件而不是edge事件,然后将每个事件的一个字节读入临时缓冲区。每次缓冲区作为一个完整的代码点有意义时,我都可以将其转换为 achar并将其存储起来,并清除暂存缓冲区。

不过,这似乎有点低效。什么是最好的方法?

0 投票
1 回答
86 浏览

rust - 是否可以在 mio 中注册多个超时?

我在 mio 中编写了一个 TCP 服务器并注册了多个超时,但只有最后一次注册的超时触发。我的超时是否需要一个包装器来组合它们,或者是否有任何其他方法可以在 mio v0.5 中注册多个超时?

0 投票
0 回答
1024 浏览

sockets - 如何接受客户端套接字,然后在 mio 中轮询 TcpStream?

我无法弄清楚如何接受客户端套接字,然后开始轮询TcpStream使用 mio 0.6 返回的事件。

我试过这段代码,但一个事件Token(1)永远不会到来。虽然accept部分打印出来了,但客户端立即断开连接。

我不知道如何正确地做到这一点。