我正在尝试了解在 Windows 上运行的 Nginx+PHP 可扩展性,比如说,100 个请求执行中期操作。
分析我看到的源代码:
Nginx 根据配置和/或服务器处理器数量多次启动。
虽然它使用 I/O 完成端口,但每个工作器只创建一个线程来处理请求。
当 PHP 请求完成后,Nginx 使用 FastCGI 与 PHP 通信
此时,尽管 NGinx 可以继续扩展,但我无法在标准 PHP fastcgi sapi 代码中看到使用多个线程/进程和完成端口进行扩展。
对于 unix/linux,PHP-FPM 可以解决问题,因为它可以分叉子进程来完成任务,但不确定性能。
但是回到 Windows,仍然在 PHP-FPM 中,我没有看到用于维持整个 Web 服务器高性能的特定代码。
Windows 有替代方案吗?我的研究有误吗?
答案1
nginx 在 Windows 上的可扩展性有限,因此不推荐将其用作生产网站的平台。
Windows 版 nginx 使用原生 Win32 API(而非 Cygwin 仿真层)。
select()
目前仅使用连接处理方法,因此不应期望高性能和可扩展性。尽管可以启动多个工作进程,但实际上只有其中一个执行任何工作。
一个工作者最多可以处理 1024 个同时连接。