Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:源代码布局改进

历史上,许多 Squid 源代码文件都被堆放在 squid/src 目录中。该目录已积累了 400 多个源文件。本项目将把紧密相关的文件进行分组,并将分组放置在各自的目录中。squid/src 目录将基本上只包含 Makefiles 和子目录。

🔗 Squid 源代码布局

本节用于编辑和最终确定源文件的分组。分组列包含 src/ 子目录名称。文件部分列出了当前文件名,并假定文件扩展名 .h、.cc 和 .cci 已添加到相应的文件名和掩码中。

单元测试 存根 命名空间 forward.h 润色 分组 定义 文件和待办事项
:neutral_face: - - - :neutral_face: ~/compat/ 可移植性原语。这是底层的一个完整层,应与操作系统 API 无缝集成。 ** 将 squid.h 和 squid-old.h 中剩余的部分迁移到 compat
:frowning: :frowning: :frowning: :heavy_check_mark: :neutral_face: acl/ 访问控制 ACLexternal_acl., 添加 Acl 命名空间并重命名类?
:frowning: :frowning: :frowning: :heavy_check_mark: :heavy_check_mark: adaptation/ eCAP 和 ICAP 的通用代码  
:frowning: :frowning: :frowning: :frowning: :heavy_check_mark: adaptation/ecap/ eCAP 支持  
:frowning: :frowning: :frowning: :frowning: :heavy_check_mark: adaptation/icap/ ICAP 支持  
:neutral_face: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: anyp/ 与协议无关的协议原语 urlurn ProtoPort*
:neutral_face: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :neutral_face: auth/ 身份验证方案  
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :neutral_face: auth/basic/ 基本身份验证  
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :neutral_face: auth/digest/ 摘要身份验证  
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :neutral_face: auth/negotiate/ 协商身份验证  
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :neutral_face: auth/ntlm/ NTLM 身份验证  
:neutral_face: :frowning: :x: :frowning: :neutral_face: base/ 常用代码,没有更好的归属。 Async? wordlist. dlink.hash.
:frowning: :frowning: :frowning: :frowning: :frowning: clientdb/ 客户端信息数据库 PR 954 client_db.*
:frowning: :frowning: :frowning: :neutral_face: :neutral_face: clients/ 客户端和网关组件,用于连接到上游服务器 ftp., http., gopher.*
:frowning: :heavy_check_mark: :heavy_check_mark: :neutral_face: :neutral_face: comm/ I/O 子系统  
:neutral_face: :frowning: :frowning: :frowning: :frowning: cfg/ squid.conf 解析和管理 PR 928, cache_cf.cf. cf_* Parser.* ConfigParser.* ConfigOption.*
:frowning: :frowning: :frowning: :frowning: :frowning: debug/ 调试核心实用程序  
:neutral_face: :heavy_check_mark: :frowning: :frowning: :frowning: DiskIO 文件系统访问的 I/O 原语  
:neutral_face: :frowning: :frowning: :heavy_check_mark: :neutral_face: dns/ DNS 组件(内部、dnsserver、缓存) dns, ipcache. fqdncache.*
:frowning: :frowning: :frowning: :frowning: :neutral_face: esi/ ESI 支持 ESI*, 添加 Esi 命名空间,重命名类
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :heavy_check_mark: eui/ EUI-48 / MAC / ARP 操作  
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :neutral_face: format/ 自定义格式化  
:neutral_face: :frowning: :heavy_check_mark: :frowning: :neutral_face: fs/ 文件系统特定的缓存存储支持? 重命名类,为子目录添加 Makefiles。
:frowning: - - :frowning: - fs/aufs AUFS cache_dir Fs::Ufs 命名空间,重命名文件。待办:重命名类
:frowning: - - :frowning: - fs/diskd DiskD cache_dir FrancescoChemolli. Fs::Ufs 命名空间,重命名文件。待办:重命名类
:heavy_check_mark: :frowning: :heavy_check_mark: :frowning: :neutral_face: fs/ufs Ufs cache_dir 待办:重命名类
:heavy_check_mark: :frowning: :heavy_check_mark: :heavy_check_mark: :neutral_face: fs/rock Rock cache_dir 待办:重命名类
:frowning: :frowning: :heavy_check_mark: :frowning: :neutral_face: ftp/ 客户端、服务器和 ICAP 端共享的 FTP 原语  
:frowning: :frowning: :heavy_check_mark: :heavy_check_mark: :neutral_face: helper/ 功能/附加组件帮助程序协议原语 迁移 helper.*
:neutral_face: :frowning: :heavy_check_mark: :heavy_check_mark: :neutral_face: http/ 客户端、服务器和 ICAP 端共享的 HTTP 原语 Http*
:neutral_face: :frowning: :heavy_check_mark: :heavy_check_mark: :neutral_face: http/one/ 客户端、服务器和 ICAP 端共享的 HTTP/1 原语  
:frowning: :frowning: :heavy_check_mark: :frowning: :neutral_face: http/two/ 客户端、服务器和 ICAP 端共享的 HTTP/2 原语  
:neutral_face: :heavy_check_mark: :frowning: :frowning: :neutral_face: icmp/ ICMP 支持和网络测量 Icmpnet_db., C++ 转换 net_db*, 添加 Icmp 命名空间并重命名类
:frowning: :frowning: :frowning: :frowning: :neutral_face: ident/ IDENT 支持 ident.* 将远程连接处理移至 AsyncJob
:neutral_face: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: ip/ IP 协议 IpQos
:frowning: :frowning: :frowning: :heavy_check_mark: :neutral_face: ipc/ 进程间通信 ipc.ipc_win32., 移动文件,为它们添加 Ipc 命名空间,并调整全局名称
:frowning: :heavy_check_mark: :frowning: :frowning: :neutral_face: log/ 日志组件 自定义日志格式和分词器的命名空间。classify
:neutral_face: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :neutral_face: mem/ 基本内存管理 类重命名、文档、单元测试
:neutral_face: :heavy_check_mark: :frowning: :heavy_check_mark: :neutral_face: mgr/ 缓存管理器 迁移 CacheManager.h, cache_manager.cc 和测试用例
:neutral_face: :frowning: :heavy_check_mark: :frowning: :heavy_check_mark: parser/ 通用解析原语  
:frowning: :frowning: :heavy_check_mark: :heavy_check_mark: :frowning: proxyp/ PROXY 协议原语  
:frowning: :frowning: :frowning: :frowning: :frowning: redirect/ URL 更改(重定向器、URL 重写、URL 映射) redirect.RedirectInternal.
:frowning: :frowning: :frowning: :frowning: :neutral_face: repl/heap/ 堆替换策略算法  
:frowning: :frowning: :frowning: :frowning: :neutral_face: repl/lru/ 缓存替换策略算法  
:neutral_face: :heavy_check_mark: :frowning: :heavy_check_mark: :heavy_check_mark: sbuf/ SBuf(字符串缓冲区)组件及相关算法  
:frowning: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: security/ 传输层安全组件  
:frowning: :frowning: :frowning: :frowning: :frowning: security/sspi/ Windows 安全支持提供程序接口  
:frowning: :frowning: :frowning: :heavy_check_mark: :neutral_face: servers/ 用于接收连接的监听服务器组件 client_side*
:frowning: :frowning: :frowning: :heavy_check_mark: :neutral_face: snmp/ SNMP 组件 snmp_*, 迁移核心和代理代码。重构以提高可扩展性。
:frowning: :heavy_check_mark: :frowning: :frowning: :neutral_face: ssl/ OpenSSL 组件 库名为 libsslsquid.la,匹配 stub_lib*.cc
:frowning: :frowning: :frowning: :frowning: :frowning: shaping/ 流量整形和延迟池 PR 928, [Dd]elay. [Pp]ool.*
:neutral_face: :frowning: :frowning: :heavy_check_mark: :frowning: store/ 通用(与文件系统无关)磁盘和内存缓存支持? Storestore
:frowning: :heavy_check_mark: :heavy_check_mark: :frowning: :frowning: time/ 时间和日期处理工具 PR 1001

🔗 捆绑的附加组件源代码

本节用于编辑和最终确定对用户重要但非 Squid 构建核心的源文件的分组。这些源通常由第三方贡献,并经过 Squid 开发人员的审核以进行捆绑。

目录路径 内容类型
src/adaptation/ecap/modules/* (提议)eCAP 扩展模块,可通过配置进行链接。
src/auth/basic/*/ auth_param 基本助手
src/auth/digest/*/ auth_param 摘要助手
src/auth/negotiate/*/ auth_param 协商助手
src/auth/ntlm/*/ auth_param ntlm 助手
src/acl/external/* external_acl_type 助手
src/fs/diskd/* diskd_program 磁盘 I/O 助手
src/fs/unlink/* (提议)unlinkd_program 助手
src/http/url_rewriters/* HTTP 消息 URL 重写器(url_rewrite_program
src/icmp/* pinger_program 助手
src/log/*/ logfile_daemon 助手
src/security/cert_validators/* sslcrtvalidator_program 助手
src/security/cert_generators/* sslcrtd_program 助手
src/security/cert_password/* (提议)sslpassword_program 助手
src/store/id_rewriters/* Store-ID 重写器(store_id_program
tools/ 管理工具

🔗 问题

如果您知道解决方案或可以改进提议的解决方案,请写信给 squid-dev 邮件列表。

问题 提议的解决方案
将目前位于 squid/lib 和 squid/include 中的操作系统兼容性包装器放在哪里? squid/compat/,但由于 autoconf 的限制,代码仍必须放在 .c 文件中。
将目前位于 squid/lib 和 squid/include 中的第三方库放在哪里? squid/import/libFoo/
我们能否移除 FOO/FooSomething.h 文件名中的 Foo 前缀?该前缀不包含额外信息,对于现代编译器,尤其是在 C++ 世界中,可能是不需要的。 可以,但要小心
文件名应匹配在该文件中声明或定义的主要类。目录名应匹配该目录中类的(小写)命名空间。我们应该从 PROTOFoo 类迁移到 PROTO::Foo 类。
在尝试用编译器包含方法进行此类清理文件名时,已发现一些系统性问题。使用 foo/Foo.h 之前,请确保不存在 squid/src/Foo.h 或 squid/include/Foo.h 文件。
客户端和服务器端文件应该分开吗?
目录名应该使用 just_small、CamelCase 还是 CAPS 字母? 小写
类名和文件名应该使用 just_small、CamelCase 还是 CAPS 字母? CamelCaseHttpAcronymsIncluded
我们应该使用 squid/src/squid/ 根目录来包含大部分源文件,以便包含头文件为 <squid/group/file.h>?这可能对于已安装的头文件和使用这些头文件的第三方代码是必需的。目前尚不清楚 Squid 在可预见的未来是否会有已安装的头文件。Feature/eCAP 工作将决定这一点。
我们是否应该形成一个通用的迷你缓存对象类型,以合并 fqdncache、ipcache、idns 队列、netdb、ident-cache 以及可能尚未找到的其他对象的共享部分? 可能,但这将是另一个独立的特性事件。
在重构过程中,如何处理所有混合的 test和 stub_ 文件? 存根文件放置在可以替换它们的目标 .cc 文件旁边,扩展名为 .stub.cc,且没有文件前缀。
测试文件放在 test-suite 目录中。  
如何处理第三方集成脚本和文件? 放在 tools/ 下的应用程序特定子目录中。

🔗 依赖问题

🔗 测试架构

根据开发者会议 2023-10-25

🔗 其他

显式初始化与自初始化

The more I think on this the more I am of the opinion that using
self-registering static/global objects as method of initialization &
registration is generally a mistake. Better if each such class have a
method for initialization, with initialization order explicitly coded in
the main program. Also makes transition to runtime loaded modules easier
and less intrusive as each module can assume the modules it registers
into has been properly initialized already which means it can do a full
initialization.

Regards
Henrik

当前方法是用静态函数(通常调用 GetFoo() 或 Foo::GetInstance() 来表示 foo 全局变量)替换全局变量,该函数返回一个静态局部变量。该变量应自初始化或由 getter 函数仔细初始化。

类别:功能,所需功能

导航:站点搜索站点页面类别🔼 向上