🔗 简介和约定
🔗 简介
Squid 的源代码更多地是凭经验观察和修补发展而来,而不是基于扎实的设��过程。它承载着许多个人“触碰”过的遗留痕迹,每个人都有略微不同的技术和术语。
Squid 是一个(绝大部分)单进程代理服务器。除了 FTP,所有请求都由主进程处理。然而,Squid 不使用 Pthreads 之类的线程包。虽然这可能更容易编写代码,但它存在可移植性和性能问题。相反,Squid 为每个活动请求维护数据结构和状态信息。
代码通常难以理解,因为没有明确的活动请求状态变量。相反,线程执行会作为一系列回调函数进行,这些函数在 I/O 准备好发生或其他事件发生时执行。回调函数完成时,负责注册下一个回调函数以进行后续 I/O。
请注意,只有一个伪一致的命名约定。在大多数情况下,函数命名如 moduleFooBar()。但是,也有一些函数命名如 module_foo_bar()。
请注意,Squid 源代码变化很快,本文档的某些部分可能会过时。如果您发现任何不一致之处,请随时修改本文档。
🔗 约定
函数名和文件名将以衬线字体显示,例如 store.c 和 storeRegister()。数据结构及其成员将以斜体显示,例如StoreEntry。
🔗 编码约定
🔗 基础设施
大多数自定义类型和工具都在代码或本手册的相应部分进行了文档记录。但有一些关键点适用于全局。
🔗 定宽类型
如果您需要使用特定宽度的类型 - 例如 16 位无符号整数,请使用以下类型之一。要访问它们,只需包含“config.h”。
- int16_t - 16 位有符号。
- u_int16_t - 16 位无符号。
- int32t - 32 位有符号。
- u_int32_t - 32 位无符号。
- int64_t - 64 位有符号。
- u_int64_t - 64 位无符号。