#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 462/week @ 2024-03-14 644/week @ 2024-03-21 776/week @ 2024-03-28 525/week @ 2024-04-04 661/week @ 2024-04-11 614/week @ 2024-04-18 591/week @ 2024-04-25 545/week @ 2024-05-02 690/week @ 2024-05-09 732/week @ 2024-05-16 767/week @ 2024-05-23 601/week @ 2024-05-30 589/week @ 2024-06-06 512/week @ 2024-06-13 617/week @ 2024-06-20 444/week @ 2024-06-27

每月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