#zero-copy #relay #networking #graceful-shutdown

realm_io

Realm的高性能IO集合

17次发布

0.5.1 2024年5月19日
0.5.0 2024年5月19日
0.4.0 2023年2月3日
0.3.5 2022年10月15日
0.1.0 2022年4月23日

#1009 in 网络编程

Download history 136/week @ 2024-04-19 292/week @ 2024-04-26 49/week @ 2024-05-03 63/week @ 2024-05-10 455/week @ 2024-05-17 81/week @ 2024-05-24 91/week @ 2024-05-31 92/week @ 2024-06-07 79/week @ 2024-06-14 40/week @ 2024-06-21 376/week @ 2024-06-28 22/week @ 2024-07-05 104/week @ 2024-07-12 67/week @ 2024-07-19 35/week @ 2024-07-26 7/week @ 2024-08-02

216 每月下载量
用于 2 crate

MIT 许可证

41KB
939

Realm IO

crates.io Released API docs

Realm的高性能IO集合。

示例

use tokio::net::TcpStream;
use realm_io::{bidi_copy, bidi_zero_copy, bidi_copy_buf};
use realm_io::{Pipe, CopyBuffer};

let mut left = TcpStream::connect("abc").await.unwrap();
let mut right = TcpStream::connect("def").await.unwrap();

// direct copy     
bidi_copy(&mut left, &mut right).await;

// zero copy
bidi_zero_copy(&mut left, &mut right).await;

// use custom buffer(vector)
let buf1 = CopyBuffer::new(vec![0; 0x2000]);
let buf2 = CopyBuffer::new(vec![0; 0x2000]);
bidi_copy_buf(&mut left, &mut right, buf1, buf2).await;

// use custom buffer(pipe)
let buf1 = CopyBuffer::new(Pipe::new().unwrap());
let buf2 = CopyBuffer::new(Pipe::new().unwrap());
bidi_copy_buf(&mut left, &mut right, buf1, buf2).await;

关于暴力关闭

默认情况下,bidi_copy_buf和其他IO函数执行一个优雅关闭

启用brutal-shutdown特性后,这些IO函数将在接收到FIN包时决定执行一个暴力关闭,这将强制关闭两端的两个连接,而不等待回复包。

这在处理实现不佳的客户端或服务器的连接时很有用,这些客户端或服务器可能永远不会关闭其写入端或关闭底层的套接字。

依赖关系

~2–11MB
~94K SLoC