14 个版本
使用旧的 Rust 2015
0.2.3 | 2017 年 6 月 25 日 |
---|---|
0.2.2 | 2017 年 6 月 21 日 |
0.2.1 | 2017 年 5 月 27 日 |
0.1.9 | 2017 年 3 月 22 日 |
#8 in #kqueue
32 每月下载量
200KB
3K SLoC
soio
Soio 是一个 Rust 的 I/O 库。
文档
用法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
soio = "0.1"
然后,将以下内容添加到您的 crate 根目录
extern crate soio:
示例
use soio::{Events, Poll, Ready, PollOpt, Token};
use soio::tcp::{TcpListener, TcpStream};
// Setup some tokens to allow us to identify which event is
// for which socket.
const SERVER: Token = Token(0);
const CLIENT: Token = Token(1);
let addr = "127.0.0.1:13265".parse().unwrap();
// Setup the server socket
let server = TcpListener::bind(&addr).unwrap();
// Create an poll instance
let poll = Poll::new().unwrap();
// Start listening for incoming connections
poll.register(&server, SERVER, Ready::readable(),
PollOpt::edge()).unwrap();
// Setup the client socket
let sock = TcpStream::connect(&addr).unwrap();
// Register the socket
poll.register(&sock, CLIENT, Ready::readable(),
PollOpt::edge()).unwrap();
// Create storage for events
let mut events = Events::with_capacity(1024);
loop {
poll.poll(&mut events, None).unwrap();
for event in events.iter() {
match event.token() {
SERVER => {
// Accept and drop the socket immediately, this will close
// the socket and notify the client of the EOF.
let _ = server.accept();
}
CLIENT => {
// The server just shuts down the socket, let's just exit
// from our event loop.
return;
}
_ => unreachable!(),
}
}
}
特性
- 由 epoll、kqueue 支持
- 非阻塞 TCP、UDP 套接字
- 线程安全的跨线程通信消息通道
平台
- Linux
- OS X
- NetBSD
依赖项
~205KB