node-fastcgi-client:一个Node over PHP方案

这几天制作了一个node模块,是一个node作为FastCGI客户端,连接FastCGI服务器(如PHP)的低层协议实现。模块已发布到NPM在GitHub上使用MIT协议发布。注意:使用前请先阅读README确认开发状态;这个模块目前没有较高层的API,使用者需要有一定的FastCGI配置知识。

为什么要做这个模块?

  1. 这个想法挺有意思的。
  2. 空谈是廉价的,拿出你的代码!(——Linus)
  3. 目前NPM中没有其他类似、成熟的模块。

这个模块的价值?

  • 实现开发、测试、运行层面的数据逻辑/交互逻辑分离。典型的策略,可将URL路由、模板渲染、网络传输、浏览器端代码转译等在node中实现,利用node在这一领域的优势;同时,数据逻辑、存储层访问可使用更为简易的PHP实现,或根据团队需要以合适的技术实现。层次之间可以相对独立的实现、改变、优化。
  • 由于目前的浏览器端开发工具链(如代码构建器、预处理器、转译器)几乎都使用node实现,在HTTP请求处理过程中引入node,可以做到更多的事情,例如开发调试过程中对代码的实时转译、自动化测试等。
  • 可用于在现有PHP项目中引入node层,模块用于node与PHP的交互。新的node层可以用于实现PHP无法实现或难以实现的功能,如Websocket等长连接;在恰当配置后,已有的PHP代码无需变化。
  • 未来这个项目有可能为取代PHP-FPM的功能、直接管理PHP-CGI提供支持。

使用这个模块后,通常的请求模型?

  • 最简单地,可使用node--(FastCGI)->PHP的请求方式。
  • 如果node前有反向代理服务器(如nginx),反向代理服务器也可以对部分URL直接访问PHP。
  • 对于需要维持长连接的请求,node负责维持连接,PHP脚本不需要长时间运行。

相对于其他node与PHP交互方式的优势?

  • Node与PHP间最简单、常见的交互方式是通过PHP-CLI或直接CGI调用。这两种方式需要对每次请求创建一个PHP进程、运行node指定的PHP脚本,开销相对较重。
  • Node与PHP间也可以通过HTTP方式交互,这需要在PHP前运行HTTP服务器(如nginx)。这为系统整体增加了不必要的复杂性和开销。

写这篇文章时模块的开发状态?

  • 初始开发已结束,基本测试通过。测试使用PHP-FPM和PHP-CGI作为FastCGI服务器。
  • 下一步会提升对协议的支持度,并提供一些相对高层的API。

感谢支持!如有问题,可以去GitHub项目页面发issue。欢迎Fork!