#listen #tcp #bind #tokio #resources #network-programming

tk-listen

一组辅助futures,允许在资源限制和适当的错误处理下监听TCP(或Unix)套接字

4个版本

使用旧Rust 2015

0.2.1 2018年12月15日
0.2.0 2018年5月24日
0.1.1 2017年10月19日
0.1.0 2017年3月16日

#675 in 异步

Download history • Rust 包仓库 462/week @ 2024-03-14 • Rust 包仓库 644/week @ 2024-03-21 • Rust 包仓库 776/week @ 2024-03-28 • Rust 包仓库 525/week @ 2024-04-04 • Rust 包仓库 661/week @ 2024-04-11 • Rust 包仓库 614/week @ 2024-04-18 • Rust 包仓库 591/week @ 2024-04-25 • Rust 包仓库 545/week @ 2024-05-02 • Rust 包仓库 690/week @ 2024-05-09 • Rust 包仓库 732/week @ 2024-05-16 • Rust 包仓库 767/week @ 2024-05-23 • Rust 包仓库 601/week @ 2024-05-30 • Rust 包仓库 589/week @ 2024-06-06 • Rust 包仓库 512/week @ 2024-06-13 • Rust 包仓库 617/week @ 2024-06-20 • Rust 包仓库 444/week @ 2024-06-27 • Rust 包仓库

每月2,279次下载
用于 25 个crates(直接使用10个)

MIT/Apache

23KB
272

Tokio Listen Helper

状态:Beta

文档 | Github | Crate

一个库,允许在网络套接字上监听,并具有适当的资源限制和错误处理。

基本挑战

  • 一些连接接受错误(如“连接重置”)必须忽略,一些(如“打开文件太多”)在忽略时可能会消耗100%的CPU。您需要每次都知道如何处理它们
  • 服务器必须接受一定数量的连接以避免DoS攻击
  • 关闭监听器和更新监听地址集应该是显而易见的实现

示例

下面是基本示例


let TIME_TO WAIT_ON_ERROR = Duration::from_millis(100);
let MAX_SIMULTANEOUS_CONNECTIONS = 1000;

let mut lp = Core::new().unwrap();
let listener = TcpListener::bind(&addr, &lp.handle()).unwrap();
lp.run(
    listener.incoming()
    .sleep_on_error(TIME_TO_WAIT_ON_ERROR, &h2)
    .map(move |(mut socket, _addr)| {
         // Your future is here:
         Proto::new(socket)
         // Errors should not pass silently
         // common idea is to log them
         .map_err(|e| error!("Protocol error: {}", e))
    })
    .listen(MAX_SIMULTANEOUS_CONNECTIONS)
).unwrap(); // stream doesn't end in this case

更多内容请参阅 文档示例

许可证

以下任一许可证下授权:

贡献

除非您明确声明,否则您提交的任何贡献,根据Apache-2.0许可证定义,均应双重许可,如上所述,无任何附加条款或条件。

依赖项

~3.5MB
~55K SLoC