# Functions
NewLalServer 创建一个lal server
@param modOption: 定制化配置。可变参数,如果不关心,可以不填,具体字段见 Option.
# Variables
CheckSessionAliveIntervalSec
检查session是否有数据传输的时间间隔,该间隔内没有数据传输的session将被关闭。
对于输入型session,检查一定时间内,是否没有收到数据。
对于输出型session,检查一定时间内,是否没有发送数据。 注意,socket阻塞无法发送和上层没有向该session喂入数据都算没有发送数据。
.
DefaultConfFilenameList 没有指定配置文件时,按顺序作为优先级,找到第一个存在的并使用.
# Structs
ComplexGroupManager
注意,这个模块的功能不完全,目前只使用SimpleGroupManager
TODO(chef):
- 现有逻辑重构至当前模块中【DONE】 - server_manger接入当前模块,替换掉原来的map【DONE】 - 重构整理使用server_manager的地方【DONE】 - 实现appName逻辑的IGroupManager【DONE】 - 增加单元测试【DONE】 - 配置文件或var.go中增加选取具体IGroupManager实现的开关 - 去除配置文件中一部分的url_pattern - 更新相应的文档:本文件注释,server_manager等中原有关于appName的注释,配置文件文档,流地址列表文档 - 创建group时没有appname,后面又有了,可以考虑更新一下 - ComplexGroupManager使用IGroupCreator
---------------------------------------------------------------------------------------------------------------------
背景: - 有的协议需要结合appName和streamName作为流唯一标识(比如rtmp,httpflv,httpts)。 - 有的协议不需要appName,只使用streamName作为流唯一标识(比如rtsp?)。
目标: - 有appName的协议,需要参考appName。 - 没appName的协议,需要和有appName的协议互通。
注意: - 当以上两种类型的协议混用时,系统使用者应避免第二种协议的streamName,在第一种协议中存在相同的streamName,但是appName不止一个,这种情况下,内部无法知道该如何对应。 - group可能由第一种协议创建,也可能由第二种协议创建。.
SimpleGroupManager 忽略appName,只使用streamName.
# Interfaces
ICustomizeHookSessionContext
业务方实现该接口,从而hook所有输入到lalserver中的流以及流中的数据。.
IGroupManager
封装管理Group的容器 管理流标识(appName,streamName)与Group的映射关系。比如appName是否参与映射匹配.
INotifyHandler 事件通知接口.