手机版

PHP程序员学习使用Swoole的原因

时间:2021-08-31 来源:互联网 编辑:宝哥软件园 浏览:

最近两个月一直在研究Swoole,研究成果将于6月21日正式开源发布。在此期间,没有水文章,所以让我们利用今天的假期。用这篇文章,希望把Swoole安利给更多的人。虽然目前Swoole可能定位为一些高级phper的玩具,让中低层的人望而生畏,也可能会被一些应用场景迷惑,但其实并没有那么难。

Swoole官网中的自我介绍是“面向生产环境的PHP异步网络通信引擎”。首先,Swoole是一个网络应用的开发工具,支持Http、TCP、UDP和WebSocket。

Swoole和我们传统的PHP开发有一些区别,也有一些概念需要理解。使用一些当前基于Swoole的框架,在开发习惯上类似于传统的TP和LV框架。

那为什么要用Swoole呢?

雨润认为有以下几点:

内存驻留,避免重复加载造成的性能损失,提高海量性能

协作是异步的,提高了I/O密集型场景(如微信开发、支付、登录等)的并发处理能力。)

方便开发Http、WebSocket、TCP、UDP等应用,并能与硬件通信

PHP高性能微服务架构成为现实

存储驻留

目前,传统的PHP框架在处理每个请求之前都需要加载框架文件并配置一次。这可能已经成为性能问题的一个主要原因,但是使用Swoole没有这个问题,它在一次加载中被多次使用。

协同程序

如下图所示,这是同一个线程处理并发请求的场景。比如需要调用其他api接口或者在一个接口中读写大文件,传统的同步阻塞和协同异步的优势就会体现出来。

说到协调,首先要讲流程和线程。众所周知,进程占用资源,为了处理请求而创建大量的进程绝对是不值得的。有更多的多线程应用程序,并且在CPU级别上有几个核心将执行几个任务。一旦创建了更多的线程,就会丢失线程调度。

协同处理是在单线程的基础上实现的,在等待I/O的同时可以最大限度的利用CPU资源而不浪费,当然协同次数越多占用的内存越多,但这是可以接受的。与进程和线程相比,它们占用的资源相对较少。

使用协同学时,遇到读写文件、请求接口等场景时。协同学会自动暂停,将CPU交给其他协同学执行任务,可以提高单线程的CPU资源利用率,减少浪费,提高性能。

协作代码示例:

?phpuse Swoole \ Coroutine as co//Concorde $time=microtime(真);//为($i=0)创建10个协同学;10美元;$i){ //创建一个协同go(function())use($ I){ co 3360: sleep(1.0);//模拟I/O echo $i、PHP_EOL等请求接口,读写文件;});} swoole _ event _ wait();echo 'co time: ',microtime(true) - $time,' s ',PHP _ EOL//synchronize $ time=micro time(true);//为($i=0)创建10个协同学;10美元;$ I){ sleep(1);//模拟I/O echo $i、PHP_EOL等请求接口,读写文件;}echo 'sync time: ',microtime(true) - $time,' s ',PHP _ EOL运行结果:

0987654321 coti me 3367130069733s 0123456789 sync etime 333101005 5065155s从以上结果可以看出,协同学模式的执行不是顺序的,性能更高,当前线程的任务执行权在休眠时会交给其他协同学。

创建Http服务

其实并没有想象的那么难。看看代码:

$ http=new swoole _ http _ server(' 127 . 0 . 0 . 1 ',9501);$http-on('request ',function ($request,$ response){ $ response-end(' h1 hello Swoole。#'.兰特(1000,9999)。/h1’);});$ http-start();微服务

Tars是TAF(全应用框架),腾讯从2008年开始使用。目前TARS支持C、Java、PHP和Nodejs。该框架为用户提供了一整套与开发、运维和测试相关的解决方案,帮助产品或服务快速开发、部署、测试和上线。它集成了可扩展协议编解码、高性能RPC通信框架、名称路由和发现、发布监控、日志统计和配置管理。它可以通过微服务快速构建自身稳定可靠的分布式应用,实现完整有效的服务治理。

版权声明:PHP程序员学习使用Swoole的原因是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。