lighty 的生活

lighty 开发者博客

Lighty 在 Win32 上

在 railsconf 大会上,我花了一些时间来开发 lighty 的原生 Win32 移植版本。感谢 scons,我们已经在 Windows 上有了一个可用的构建系统,只需要一些 #ifdef 指令就能让这个大家伙编译通过。这项工作尚未准备好投入生产环境,但前景非常光明。除了‘如何生成进程’这个问题外,所有问题都已解决,而诸如 opendir()、socket-read()/write() 模拟等其他更改也带来了更清晰的 API。所有的 network-read() 操作都已移至网络后端(connections.c, mod_proxy.c 等各自处理 read() 操作)。很久以前我就已经为 read() 写了一个抽象层,但做得太过了,未能将复杂的代码精简到核心部分。这次(感谢 svk),如果我走错了方向,我可以回滚。 1. 将所有 read() 调用抽象为 network_read() 调用,并使用最佳的 read() 实现(read()、readv()、recv() 等)[已完成] 2. 将文件描述符抽象成一个 fd 结构体,例如 { int fd; SSL *ssl; enum { FILE, SOCKET, PIPE}}。这主要对 mod_proxy + SSL 以及 Solaris 上通过管道用于 mod_cgi 的 sendfilev() 有意义。 3. 再次拉近 mod_proxy 和 mod_fastcgi 的距离,并提取出它们的共同代码。network_read() 的抽象将是 .12 版本的一部分,而 Win32 移植版本则适用于 1.5.x,fd 结构体也是如此。mod_proxy 的清理工作并使其更接近 mod_fastcgi 将在 1.4.12 版本中开始,并在 1.5.x 版本中作为 mod_proxy_core 完成。简而言之,事情又回到了正轨。