为啥fpm模式,nginx只需要cpu对应的个数,webman 运行的时候却需要开启额外的进程?

= - =

问题描述

在使用 nginx + fpm 的方式时,nginx 只需要配置4个(cpu 个数) worker。php 会自动动态创建 worker 接收请求。不会出现阻塞。但是独立使用 webman 的时候却需要额外开启端口来接收请求,以避免 IO 阻塞。

646 3 0
3个回答

= - =

@walkor 亮哥,对这个问题,有个疑惑,有办法让 webman 做到,根据需要自动fork进程接收请求吗?

  • walkor 2023-12-26

    fpm支持动态创建进程,但是也不是无限创建,进程数量受到fpm配置和系统内存限制。
    webman是事先创建好足够的进程,webman 不支持动态调整进程数。

    php 会自动动态创建 worker 接收请求。不会出现阻塞。
    这个说法不成立,fpm处理业务仍然是阻塞处理。

    但是独立使用 webman 的时候却需要额外开启端口来接收请求,以避免 IO 阻塞。
    没有这个说法。

  • = - = 2024-01-16

    https://www.workerman.net/doc/webman/others/task.html 是这里的问题。php-fpm 好像会自动fork进程。

chaz6chez

nginx与fastCGI也就是fpm主进程进行socket通讯,将消息发送给主进程,主进程会选择空闲的子进程进行处理任务,当所有子进程都不空闲时,主进程会阻塞等待直到有空闲进程。

主进程再交接任务给子进程时会进行一些处理判断,选择是否弹性子进程
子进程在处理php业务时会进行php解析回收处理等一系列操作

workerman类似于fpm的静态模式,但worker处理任务的时候无需每次都进行php解析回收等操作,同时也可以不需要与nginx进行socket通讯,你可以简单理解为workerman就是nginx,直接可以通过worker处理任务,无需再下发

gateway的模式类似nginx+fpm,但整体还是没有php解析回收处理等操作,节省了很多资源和时间

  • = - = 2024-01-16

    https://www.workerman.net/doc/webman/others/task.html 是这里的问题。不知道能否像 nginx 和 fpm 的配合一样,这样开端口感觉挺麻烦的

  • chaz6chez 2024-01-16

    不同的process是不同的进程,不同的进程就需要开不同的端口,否则不同的进程监听相同的端口,如果协议不同,岂不是乱套了?

  • = - = 2024-01-16

    我的意思是,在 nginx + fpm 的模式下。不管每次的请求是慢请求还是快请求。都不需要开发人员去做额外的运维配置。

    但是在 webman 的使用过程中,却需要区分快请求和慢请求。并且需要在 nginx 的运维层面做区分。

  • nitron 2024-01-17

    你不区分快慢请求也行啊,多开点进程就行,不是一定要区分,只不过区分的方案更好罢了

zjkal✅

额外开端口其实主要是为了方便和Nginx和Apache的端口区分开, 然后便于通过反向代理实现一些其他的功能, 比如https之类的.如果直接使用80端口, 或者在webman里配置https,就很复杂了

🔝