1.SwooleSwoole号称重新定义PHP。它是一个PHP扩展,使PHP能够以异步方式执行,就像node一样,也可以使用sockets,为PHP提供了一系列异步IO、事件驱动、并行数据结构的功能。Swoole4支持完整的协程编程模式,可以使用完全同步的代码来实现异步程序。PHP代码无需额外添加任何关键字,底层自动进行协程调度,实现异步IO。nodejs能实现的swoole几乎都可以实现,性能比nodejs高。毕竟nodejs是单线程的,不能充分发挥CPU的性能,而swoole是多线程的,可以充分发挥CPU的性能。Swoole的高效与传统web开发有什么区别?除了传统的LAMP/LNMP同步开发模式,swoole的异步开发模式是什么,如何保持效率?2、传统的web开发模式PHPweb开发采用LAMP/LNMP架构,即Linux、Nginx、Mysql和PHP。这里我们以nginx为例。大体结构是:当一个请求进来时,web服务器将请求转发给PHP-FPM。PHP-FPM是一个具有进程池架构和内置PHP解释器的FastCGI服务。FPM负责解释执行PHP文件生成响应,最终返回给web服务器显示给前端。PHP文件中实现了很多业务逻辑,包括访问Mysql和Nosql,调用第三方应用等。php-fpm和nginx在这种结构下的配合已经足够好了,但是由于php-fpm本身是一个同步阻塞的进程模型,所有的资源(包括框架初始化创建的一系列对象)都是在请求结束后释放的,导致PHP进程“Idling”(create<-->destroy<-->create)大量消耗CPU资源,导致单机吞吐量受限。处理每个请求的过程意味着不必要的耗时操作,例如PHP文件解析和环境设置。PHP进程处理完后会被销毁。在PHP程序中不可能使用连接池等技术来实现性能优化。3、Swoole运行方式针对传统架构存在的问题,swoole从PHP的扩展入手,解决了上述问题。我们已经了解了swoole的进程模型。与传统架构相比,Swoole进程模型最大的特点是其多线程Reactor模式处理网络请求,可以轻松处理大量连接。此外,优点还包括:完全异步非阻塞,资源消耗低,程序执行效率高,程序运行只解析和加载PHP文件一次,避免了每次请求重复加载过程,并使与连接池和请求。实现信息传输等成为可能。4.为什么要在Swoole上运行Laravel?Laravel框架在启动时,需要加载很多文件。再加上它以良好的生态环境着称,所以我们在发展过程中会发现很多问题。造的轮子很多,导致Laravel一次性启动的磁盘IO非常高(也就是需要加载很多文件)。每次发出请求时都需要执行laravel生命周期。因为单个请求创建的环境会在请求执行结束后立即销毁。换句话说,在传统的PHP生命周期中,大量时间浪费在创建和销毁用于脚本执行的资源上。想象一下像Laravel这样的框架,每次请求需要加载多少个文件?也浪费了大量的I/O操作。那么如果我们使用Swoole搭建一个应用级的Server,所有的脚本文件加载一次就可以保存在内存中呢?这就是为什么我们需要尝试在Swoole上运行Laravel。Swoole可以提供强大的性能,而Laravel可以提供优雅的代码结构。这两个真的是绝配!5.使用Swoole提升Laravel的性能。现有的轮子中,我觉得下面两个还是很不错的。可以选择swooletw/laravel-swoolegarveen/laravoole。我选择了第一个来测试Installwithcomposer:composerrequireswooletw/laravel-swoole如果你使用的是laravel,那么将SwooleTW\Http\LaravelServiceProvider::class添加到config/app.php的providers数组中,如果你使用的是lumen,然后在bootstrap中添加如下代码到/app.php$app->register(SwooleTW\Http\LumenServiceProvider::class);将配置文件导出到config目录下phpartisanvendor:publish--provider="SwooleTW\Http\HttpServiceProvider"然后就可以到config/swoole_http.php配置信息'server'=>['host'=>env('SWOOLE_HTTP_HOST','0.0.0.0'),//监听任意ip'port'=>env('SWOOLE_HTTP_PORT','1215'),'options'=>['pid_file'=>env('SWOOLE_HTTP_PID_FILE',base_path('storage/logs/swoole_http.pid')),'log_file'=>env('SWOOLE_HTTP_LOG_FILE',base_path('storage/logs/swoole_http.log')),'daemonize'=>env('SWOOLE_HTTP_DAEMONIZE',1),//1-程序会转入后台,作为守护进程运行],swoole_http.php也有提到对于providers数组的配置,'providers'=>[//App\Providers\AuthServiceProvider::class,]因为使用swoole作为http后,这些providers会存储在内存中,所以这里的配置是每次请求都要重新注册并重启提供者现在,您可以执行以下命令来启动SwooleHTTP服务。$phpartisanswoole:httpstart然后可以看到如下信息:Startingswoolehttpserver...Swoolehttpserverstarted:
