42个版本 (稳定)
3.7.3 | 2024年8月10日 |
---|---|
3.7.2 | 2024年6月15日 |
3.7.0 | 2024年4月22日 |
3.6.0 | 2024年3月24日 |
0.1.9 | 2020年9月6日 |
#11 in 异步
3,686,614 每月下载量
用于 4,976 个crate(32个直接使用)
200KB
4K SLoC
polling
epoll、kqueue、事件端口和IOCP的可移植接口。
支持的平台
- epoll: Linux、Android、RedoxOS
- kqueue: macOS、iOS、tvOS、watchOS、FreeBSD、NetBSD、OpenBSD、DragonFly BSD
- 事件端口: illumos、Solaris
- poll: VxWorks、Fuchsia、HermitOS、其他Unix系统
- IOCP: Windows、Wine(版本7.13+)
轮询以单次模式进行,这意味着如果需要关注同一类型事件的下一个事件,则需要在事件传递后重置对I/O事件的兴趣。
同一时间只能有一个线程等待I/O事件。
示例
use polling::{Event, Poller};
use std::net::TcpListener;
// Create a TCP listener.
let socket = TcpListener::bind("127.0.0.1:8000")?;
socket.set_nonblocking(true)?;
let key = 7; // Arbitrary key identifying the socket.
// Create a poller and register interest in readability on the socket.
let poller = Poller::new()?;
poller.add(&socket, Event::readable(key))?;
// The event loop.
let mut events = Vec::new();
loop {
// Wait for at least one I/O event.
events.clear();
poller.wait(&mut events, None)?;
for ev in &events {
if ev.key == key {
// Perform a non-blocking accept operation.
socket.accept()?;
// Set interest in the next readability event.
poller.modify(&socket, Event::readable(key))?;
}
}
}
许可证
许可协议为以下之一
- Apache License,版本2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/license/mit/)
任选其一。
贡献
除非您明确说明,否则您根据Apache-2.0许可证定义的任何有意提交的用于包含在作品中的贡献,均应如上双许可,而无需任何额外的条款或条件。
依赖关系
~2–12MB
~141K SLoC