#listen #networking #server #protwrap

lstngrp

将监听器和连接组合起来,具有共同的数据/逻辑

2 个版本

0.0.2 2024 年 8 月 20 日
0.0.1 2024 年 8 月 6 日

#8 in #listen

Download history 102/week @ 2024-08-02 10/week @ 2024-08-09

112 次每月下载

0BSD 许可证

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