php网站 被 黑_为什么Swoole可以加速php

news/2024/5/9 17:54:41/文章来源:https://blog.csdn.net/weixin_39615991/article/details/111651623

前言

最近在研究Swoole,原来一直听别人在说Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。

PHP-CGI 的黑历史

对于 PHP 处理网络请求,大家基本上也都是在用 CGI 的方式来做的。那么,什么是 CGI 呢。

CGI

CGI,全称 Common Gateway Interface,中文称作“公共网关接口”。也许有很多人认为 CGI 是一个程序,没错,曾经的我也是这么认为的。直到我从《图解HTTP》开始细细地研究HTTP协议之后,我才知道,原来 CGI 是一种协议。任何编程语言,都可以实现 CGI,所以任何语言都可以作为网站的后台语言(扯远了)。

PHP-CGI

上面说了,CGI 是一个协议,所以,PHP 有自己对 CGI 的实现,那就是 PHP-CGI。可是呢,随着技术的发展,人们开始意识到,PHP-CGI 的性能不是那么尽如人意。我们知道,PHP 在运行的时候,是依赖配置文件 php.ini的。所以,每当 PHP-CGI 开始工作的时候,它是完完全全的一个新进程,它需要重新加载配置文件并初始化,这就造成了很大的资源和时间的浪费。

FastCGI

那么,怎么才能避免这种浪费呢,聪明的程序员们想出了另外一种方法:我们为什么不预先加载好配置,然后,每一个执行的任务只需要复制当前的进程,不就能避免上面的浪费了么。于是, FastCGI 便横空出世。

FastCGI,全称 Fast Common Gateway Interface,中文译作“快速公共网管接口”。没错,这又是个协议。当然,这个协议并不是因为 PHP 才有的。

Apache (httpd)

几乎所有的 Web 容器都实现了 FastCGI 的功能。首先是 httpd。对于 PHP 来说,httpd 是通过自身来实现一个 FastCGI 的模块的。它会预先加载好 php.ini 文件中的配置。待到有请求进入需要 PHP 处理时,PHP就不需要再对 php.ini 重新加载了。这也就是每改动过 php.ini 后都要重启 httpd 服务的原因。

Nginx 与 php-fpm

php-fpm 也是 FastCGI 的一种实现。通常我们是将 Nginx 的 PHP 处理部分代理到 php-fpm 的端口上,交给 php-fpm 来处理。而 php-fpm 同样是通过预先加载配置,然后给到子进程的方式的,它会对进程做一些管理。

Swoole

辣么问题来了,php-fpm 虽然实现了 FastCGI,但是,它在处理请求的时候,依然要重新运行一个脚本,像 Laravel 一样的框架,一开始就要加载辣么多依赖和文件,依然是一个不小的开销。我们看一下 Laravel 的 public/index.php 的源码。

require __DIR__.'/../bootstrap/autoload.php';$app = require_once __DIR__.'/../bootstrap/app.php';$kernel = $app->make(IlluminateContractsHttpKernel::class);$response = $kernel->handle(    $request = IlluminateHttpRequest::capture());$response->send();$kernel->terminate($request, $response);

看看前面两条语句,这需要加载多少个依赖啊,这都是大把大把的时间和资源啊,每一次请求都需要加载一遍,真是心疼啊。

那么,我们为什么不能像之前一样,能够不重新加载配置文件的 FastCGI ,来一个不用加载这么多的依赖的方式呢?

当然可以啦,这时候 Swoole 就派上用场了。既然是通过 $app->make 的方式来生成一个新的 Kernel 对象,那么 Application 的对象 $app 自然是不会有什么改变的了。所以,我们可以在收到请求之前,就把 $app 给生成好,这样就会快了,不是么?我们可以对它进行一个简单的改造。

require __DIR__.'/../bootstrap/autoload.php';$app = require_once __DIR__.'/../bootstrap/app.php';$serv = new SwooleServerHttp('127.0.0.1', 9501);$serv->on('request', function ($req, $res) use ($app) {    $kernel = $app->make(IlluminateContractsHttpKernel::class);    $response = $kernel->handle(        $request = IlluminateHttpRequest::capture()    );    $res->end($response);    $kernel->terminate($request, $response);});$serv->start();

好了,我们现在就可以通过执行这个脚本来监听9501端口了。然后就像 Nginx 配置 php-fpm 一样来配置它就可以了。这样我们可以看到,在收到请求之前,就已经把依赖加载干净了,剩下的就是处理请求了。

当然我的这个改动很简陋,根本无法用于生产环境的,知识提供一个例子。

后记

以上只是我自己的理解和对我自己的理解进行的总结。对于 Swoole 我还在探索当中,因为它需要的知识实在是太多了,需要一点一点积累。本文可能有不对的地方,欢迎各位大神来拍砖!

作为web开发的佼佼者PHP并不逊色其他语言,加上swoole后更加是如虎添翼!进军通信 、物联网行业开发百度地图、百度订单中心等!年后更是霸占程序员招聘语言第二名,寒冬裁员期过后正是各大企业扩大招人的时期,现在市场初级程序员泛滥,进阶中高级程序员绝对是各大企业急需的人才,这套教程适合那些1-6年的PHP开发者进阶中高级提升自己,在金九银十中找到高薪职位!

ed19eeaa56ee65cb41892d32a2b20aac.png

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

部分资料展示:

357f92198a3e1ef9f2ad5ff7f2831d28.gif
fb17b48e11678f852d77b53c7175cd15.gif
842bb81f14ec226b1257084c02180785.png
3f057f9ee2253f593540a7f6d4d88f52.png
4387493ad0212c5475483a5b76dda0a0.png

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_806217.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

m_Orchestrate learning system---网站的语言选择功能(中文英文)

m_Orchestrate learning system---网站的语言选择功能(中文英文) 一、总结 一句话总结:有两种方法,一是sessionjs端代码,而是sessionphp端代码。 推荐使用sessionphp端代码 用函数最方便,最简便&#xff0c…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

千万级用户的大型网站,应该如何设计其高并发架构?

目录(1)单块架构(2)初步的高可用架构(3)千万级用户量的压力预估(4)服务器压力预估(5)业务垂直拆分(6)用分布式缓存抗下读请求&#xf…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书,就应该有所收获,有所总结,最近把《大型网站技术架构》一书给看完了,给人的印象实在深刻,再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点…

是时候让你的网站用上HTML5

可能在几年之前,很多开发者对Html5只是有所耳闻,但是现在再看,各大厂商对于HTML5的支持不遗余力,包括在浏览器支持和技术内容分享的程度都狠下功夫,为了就是能够抢占HTML5的话语权。对于开发者而言,是时候让…

黑客组织 Anonymous 向色情网站创始人宣战

[导读]Anonymous是世界最大的黑客组织,曾经先后组织过针对Visa网站、万事达网站、索尼PlayStation在线网络等网络系统的攻击,并造成了被攻击方的严重损失。 北京时间12月9日消息,据国外媒体报道,著名黑客组织Anonymous日前正式同两…

中国盗版网站站长李翔在美被判入狱12年

【PConline 资讯】6月13日消息,中国盗版网站Crack99.com的站长李翔因非法出售多种盗版软件,于2011年6月被美国政府诱捕。近日,美国法院对李翔进行了宣判,宣判结果为判李翔入狱12年,在美服刑结束后,将李翔遣…

Hyper-V虚拟linux系统挂载windows宿主机共享文件夹实现网站数据备份的方法

最近在折腾软路由和虚拟机搭建网站,过程可参见笔者之前的几篇文章《Hyper-V安装lede软路由成功经历》、《Hyper-V安装centos系统搭建linux建站环境》,从而实现了在windows中通过Hyper-V搭建软路由和安装centos系统建站的目的。但我也一直在想&#xff0c…

Hyper-V安装centos系统搭建linux建站环境

Hyper-V安装centos系统搭建linux建站环境 前段时间写了篇文章《Hyper-V安装lede软路由历程及注意事项》介绍如何在windows10中通过Hyper-V虚拟机安装openwrt软路由以实现宿主机及与其连接的路由器、交换机下接设备联网功能。同时还写了《利用lnmp一键安装包配置自动更新的免费…

使用Vue仿一个网易云网站

使用Vue仿一个网易云网站小记预期进程记录12-0912-1412-1712-18源码组件分析ViewsSongsTopTitleCarouselPopMuiRecTitlePopRecMusicListMusicItemRecommendSingerRecommendSingerShowRecommendSingerListRecommendSingerItemSongListTargetSongShowSongListShowNewDiscNewDiscF…

一步一步SharePoint 2007之二十二:完美解决实现Form认证后无法再用SharePoint Designer编辑网站的问题...

摘要  前面的文章中,我们采用“曲线救国”的方式解决实现Form认证后无法再用SharePoint Designer编辑网站的问题,还甚至说Microsoft公司并未考虑这个问题。  这两天在国外的网上闲逛,偶然看到一篇关于这个问题文章,原来这个问…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台,融合了软件开发领域的各个角色,涵盖软件开发生命周期的各个阶段,包括设计,开发,测试,管理,而这一整套构件的融会贯通,让它可以有效地改善软件开…

小问题 小技巧 :网站路径问题

网站的开发,我总会遇到路径的问题,而且有时还搞不明白。总是自己经过调试之后才知道应用什么路径,如何去取路径。面对这半知半解的 问题,我准备写一写这些小问题,也好给自己长个记性。 1、先从C#中提供的几个方法说起吧…

IIS网站服务器性能优化指南

Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一个像模像样的Web站点来,但配置、优化IIS的性能…

达达兔网站服务器是哪里,达达兔影院网官网

达达兔是一款掌上的影院,你可以在这里收看到不同的影视作品,更多的影视作品离线在线都可以看,经典的,新颖的,喜爱看电影追剧的朋友绝对不能错过的一款app,全网优质的影视轻松观看,享受精彩的剧集…

网站设计风格

它总结了一些当前网站设计风格的发展趋势。但是我得先提一句,它说的都是西方网站,未必适合我们中国网站的情况和中国网民的审美观。如果能给你一点点参考和借鉴的价值,就足够了。 我很高兴看到2006年的网站设计比以往任何时候都要好。…

网站建设技术方案_企业网站建设方案

郑州企业网站建设价格低21世纪是信息化的时代,在信息时代生存的公司的基本规则就是要符合时代的要求。网站的建设对于现代企业而言,其重要性不言而喻,有时,网络经营的好坏直接关系企业的生存及发展。随着企业对网站的需求逐渐增加…