4 个版本
0.1.4 | 2023 年 3 月 15 日 |
---|---|
0.1.3 | 2023 年 3 月 14 日 |
0.1.2 | 2023 年 3 月 11 日 |
0.1.0 | 2023 年 3 月 4 日 |
#665 在 异步
26 每月下载量
115KB
3K SLoC
反应堆
反应堆 是一个用于 Rust 的底层跨平台异步 IO 包装库 futures
linux/android
epoll 后端macos/ios/freebsd
kqueue 后端windows
iocp 后端
基准测试
线程模型
反应堆 不限制它使用的线程模型。特别是,我们可以创建多个 IoReactor 对象来共享 IO 负载
use reactors::io::*;
use reactors::io::socket::tcp::TcpAcceptor;
use reactors::io::IoReactor;
use std::thread::spawn;
use futures::TryStreamExt;
use futures::{AsyncReadExt, AsyncWriteExt};
use futures::executor::block_on;
use std::time::Duration;
use reactors::Reactor;
fn main() -> anyhow::Result<()> {
let acceptor_reactor = IoReactor::default();
let connection_reactor = IoReactor::default();
let mut acceptor_reactor_background = acceptor_reactor.clone();
let mut connection_reactor_background = connection_reactor.clone();
spawn(move || {
acceptor_reactor_background.poll_once(Duration::from_millis(100)).unwrap();
});
spawn(move || {
connection_reactor_background.poll_once(Duration::from_millis(100)).unwrap();
});
let mut acceptor = TcpAcceptor::new(acceptor_reactor, "127.0.0.1:1813".parse()?, Some(connection_reactor))?;
block_on(async {
while let Some((conn, _)) = acceptor.try_next().await.unwrap() {
let mut reader = conn.to_read_stream(None);
let mut writer = conn.to_write_stream(None);
let mut buff = [0u8; 11];
reader.read_exact(&mut buff).await.unwrap();
assert_eq!(&buff, b"hello world");
writer.write_all(&buff).await.unwrap();
}
});
Ok(())
}
依赖项
~0.8–8.5MB
~61K SLoC