- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是一名 Rust 初学者,正在为异步 IO 问题而苦苦挣扎。我决定使用 mio .
我已经阅读了一些源代码和教程,但仍有一些基本部分我不明白。我正在使用 netcat -k -l 127.0.0.1 9999
设置服务器。然后我用 cargo
(下面的代码)运行简单的测试。我期待看到“准备好”或“滴答声”的 panic 。但它永远不会发生,测试会永远运行。
extern crate mio;
use mio::*;
#[allow(unused_imports)]
use mio::tcp::TcpStream;
#[allow(dead_code)]
struct MyHandler;
impl Handler for MyHandler {
type Timeout = ();
type Message = ();
fn ready(&mut self, _event_loop: &mut EventLoop<Self>, _token: Token, _event_set: EventSet) {
panic!("ready");
}
fn tick(&mut self, _event_loop: &mut EventLoop<Self>) {
panic!("tick");
}
}
#[test]
fn mio_test1() {
let addr = "127.0.0.1:9999".parse().unwrap();
let mut event_loop = EventLoop::<MyHandler>::new().unwrap();
event_loop.register(&TcpStream::connect(&addr).unwrap(), Token(0), EventSet::readable(), PollOpt::level()).unwrap();
event_loop.run(&mut MyHandler).unwrap();
}
最佳答案
您的问题是因为您打开的套接字在您的事件循环有机会运行之前关闭。
您当前的代码大致等同于:
let addr = "127.0.0.1:9999".parse().unwrap();
let mut event_loop = EventLoop::<MyHandler>::new().unwrap();
{
let sock = TcpStream::connect(&addr).unwrap();
event_loop.register(&sock, Token(0), EventSet::readable(), PollOpt::level()).unwrap();
} // The socket is closed here, before the event loop runs
event_loop.run(&mut MyHandler).unwrap();
所以修复只是将套接字绑定(bind)到一个变量,这样当您调用事件循环时它会保持打开状态。
let addr = "127.0.0.1:9999".parse().unwrap();
let mut event_loop = EventLoop::<MyHandler>::new().unwrap();
let sock = TcpStream::connect(&addr).unwrap();
event_loop.register(&sock, Token(0), EventSet::readable(), PollOpt::level()).unwrap();
event_loop.run(&mut MyHandler).unwrap();
然后您的代码将按照您的预期运行,并在套接字上有可读取的内容时立即出现错误。
关于linux - MIO EventLoop 未针对 TcpStream 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486891/
EventLoop 接口 Netty 是基于 Java NIO 的,因此 Channel 也有其生命周期,处理一个连接在其生命周期内发生的事件是所有网络框架的基本功能。通常来说,我们使用一个线程来处理
与通过 POLLIN 多路复用多个套接字有何不同? while True: socks = dict(poller.poll()) if socks.get(control_recei
相关问题here 我发现了 runTouchApp 函数的 slave 属性可以阻止 Kivy 的事件循环运行并强制从其他地方更新它。 这是使用该属性的 app.py 的一部分: # we are i
我正在阅读netty 4源代码。 eventLoop.inEventLoop() 随处可见。根据 Netty 的实际情况: A Channel is registered for its lifeti
如何从 EventLoop 获取单线程执行器? 原因是我想对应用程序的一部分使用单个线程,但仍可供 EventLoop 使用。 最佳答案 事件循环始终仅由单个线程支持。所以事件循环实际上只是一个单线程
我的应用程序的第一个屏幕有一个包含三个按钮的小菜单(在网格布局中)。两个应该打开弹出窗口。一份用于“帮助”,一份用于“关于”。第三个屏幕变为另一个屏幕。 只有一个弹出窗口有效。第一个调用(在 kivy
我想在后台线程中创建一个 PyZMQ 事件循环,并让它与独立的 Python 脚本和 IPython 脚本一起正常工作。 (IPython 使用位于主线程中的 PyZMQ 事件循环,因此这给我带来了问
我真的为此而疯狂,我希望有人能给出答案......我确实遇到了 QUdpSockets 的奇怪问题以及信号和槽连接。我在 3 个不同的 UdpSockets 接收小数据包(64 字节) 100Hz,之
我正在尝试让 python 为我播放一个音频文件。我正在思考的树冠中编写我的代码。 import pyglet sound = pyglet.media.load('song.wav') sound.
我正在尝试构建一个基于Netty的UDP服务器,以根据客户端订阅(在订阅设置之前交换一些UDP请求/响应消息)向不同的客户端持续发布事件(每秒大约500个事件)。 设计是让 Java Executor
我试图理解为什么在我的 QProcess waitForFinished() 和 waitForStarted() 调用可以工作之前,不需要在以下 Qt 4.8 代码中调用 a.exec() 。我知道
我是一名 Rust 初学者,正在为异步 IO 问题而苦苦挣扎。我决定使用 mio . 我已经阅读了一些源代码和教程,但仍有一些基本部分我不明白。我正在使用 netcat -k -l 127.0.0.1
我想检测 Netty 的 EventLoop 以便: 以确定的顺序运行任务。 捕获计划任务的截止日期。 快进虚拟时钟,触发截止任务的执行。 我知道 EmbeddedChannel 并在一些测试中使用它
在设计和性能方面推荐哪种方法来处理多个 Zeromq 套接字,为什么? ZeroMQ 使用的 Tornado 的 IOLoop 占用的 CPU 比 while 循环中用于处理多个套接字的 Poller
Event Loop 是 JavaScript 的基础概念,面试必问,平时也经常谈到,但是有没有想过为什么会有 Event Loop,它为什么会这样设计的呢? 今天我们就来探索下原因。 浏览
1.写在前面 无论是浏览器端还是服务端Node.js,都在使用EventLoop事件循环机制,都是基于Javascript语言的单线程和非阻塞IO的特点。在EventLoop事件队列中有
什么功能eventloop在 Scala 中做 Actors它有什么用? 最佳答案 eventloop与 loop 类似和 react被结合。 loop的区别和 eventloop是loop ,实际上
我知道在 python37 中我们有一个新的 api asyncio.get_running_loop() ,好用,让我们在调用协程的时候不需要显式传递eventloop。 我想知道我们是否可以使用任
我越来越熟悉 python 的 异步 ,python中的异步编程,协程等。 我希望能够用我自己定制的 执行几个协同程序事件循环 . 我很好奇我是否可以自己写 事件循环 不导入 异步 根本 最佳答案 I
我正在研究Netty 4.0.0.Alpha5代码,以了解如何处理线程。我还通过http://netty.io/wiki/new-and-noteworthy-in-4.0.html#wiki-h2-
我是一名优秀的程序员,十分优秀!