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