一、什么是FastCGI
在Swoole发布的v4.5(RC)版本中,我们实现了一项非常有意思的新特性,那就是协程版本的FastCGI客户端。
那么什么是FastCGI呢?首先先来一个官方解释:
快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。
其实很简单,大家使用PHP-FPM搭建服务的时候必然少不了前面架一个Nginx丶Apache或者IIS之类的东西作为代理,我们应用程序和代理通信的时候,可能会使用各种各样的协议(常见的比如浏览器使用的是HTTP/1.1,HTTP2,QUIC等),而代理的职责就是把各种协议的请求翻译成FastCGI来和PHP-FPM通信,这样PHP服务就无需关心各种类型协议的解析,而可以只关心处理请求本身的内容,且FastCGI是二进制协议,相较于HTTP1.x这样的文本协议,FastCGI可以说是非常高效。
实现了FastCGI客户端,那么我们就可以直接与PHP-FPM服务进行交互,但这有什么用呢?
二、Swoole中的Task进程
欢迎加入我的官方群
在一个Swoole的异步/协程服务中,我们无法容忍任何阻塞的存在,只要有一处调用阻塞,那么整个服务程序都会退化为阻塞程序,而此时如果我们又没有太多的资源去重构老项目,我们通常会选择使用Task进程来解决。
Task进程是Swoole异步服务器中专门设计用来执行同步阻塞程序的工作进程,我们可以很方便地调用$server->task方法去投递一个同步阻塞任务给Task进程并立即返回,Task进程在完成后再通知Worker进程接收结果,这样就构成了一个半异步半同步的服务器。
我们需要大量的task进程来处理少量的同步阻塞任务,但只需要少量的Worker就可以处理大量的异步非阻塞任务,这就是多路IO复用技术带来的好处。