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 异步
每月2,279次下载
用于 25 个crates(直接使用10个)
23KB
272 行
Tokio Listen Helper
状态:Beta
一个库,允许在网络套接字上监听,并具有适当的资源限制和错误处理。
基本挑战
- 一些连接接受错误(如“连接重置”)必须忽略,一些(如“打开文件太多”)在忽略时可能会消耗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 License 2.0版本(./LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(./LICENSE-MIT 或 http://opensource.org/licenses/MIT)由您选择。
贡献
除非您明确声明,否则您提交的任何贡献,根据Apache-2.0许可证定义,均应双重许可,如上所述,无任何附加条款或条件。
依赖项
~3.5MB
~55K SLoC