2 个版本
| 新 0.0.2 | 2024 年 8 月 20 日 |
|---|---|
| 0.0.1 | 2024 年 8 月 6 日 |
#8 in #listen
112 次每月下载
27KB
426 行
listengroup
ListenGroup 的目的是将一组网络监听器收集到一个单一实体中,并帮助跟踪针对这些监听器建立的连接。
lib.rs:
对一组监听器和它们生成的连接进行抽象。
ListenerGroup 是一组绑定到相同基本连接处理逻辑的网络监听器。
使用概述
应用程序调用 [ListenerGroup::new()] 创建一个新的 ListenerGroup 对象。向 new() 函数传递一个实现 GroupHandler 特质的对象。实现 GroupHandler 的对象负责所有监听器之间的共享数据,而 GroupHandler 特质方法的实现负责共享逻辑。值得注意的是 [GroupHandler::connected()] 特质方法,其职责是返回一个实现 ConnHandler 特质的对象。
ConnHandler 的实现有两个值得注意的特殊特质方法。当建立连接时,将调用 [ConnHandler::run()]。应用程序应在此方法中实现连接管理逻辑。当调用 [ConnHandler::kill()] 时,应用程序必须执行一些逻辑来终止连接并从 ConnHandler::run() 实现中返回。
一旦创建了一个 ListenerGroup 对象,应用程序就会调用 [ListenerGroup::add_listener()] 来添加监听器。一个后台任务将立即开始监听传入的连接。
当应用程序完成对 ListenerGroup 的使用时,它可以调用 [ListenerGroup::shutdown()] 来有序地关闭所有监听器和连接(只要应用程序正确实现了 ConnHandler::kill() 方法)。
每个监听器的上下文
ListenerGroup 为所有监听器使用单个 GroupHandler 对象。如果应用程序需要特定于每个监听器的数据,它可以在其 GroupHandler 对象中使用关联容器(如 HashMap)将监听器的唯一标识符映射到容器中的特定于监听器的上下文。请参阅 lstngrp 存储库中的 per_listener_ctx 示例,以了解此实现的示例。
依赖项
~12–22MB
~379K SLoC