php如何与apache连接超时
前言
要理解浏览器和apache之间的连接超时问题,需要先明白http的keep-alive属性。先简单介绍keep-alive,您可以从网上查找更加详细的介绍。
浏览器和apache都是基于http协议的。而http协议中的keep-alive属性通俗的解释就是浏览器和apache第一次建立TCP连接,传输完数据不会立刻断开这个TCP连接,而是继续等待下一个请求。保持一段时间(keep-alive-time)后才会断开连接。
下面做个测试,查看apache在打开keep-alive支持和关闭keep-alive支持时候的TCP连接状态。
服务端 | 虚拟机上的Centos |
客户端 | 本机上IE6浏览器 |
服务端地址 | 192.168.212.128 |
客户端地址 | 192.168.212.1 |
访问的文件test.html | <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="./main.css" /> <script type="text/javascript" src="./main.js"></script> </head> <body> 您知道吗?A处和B处的色值是一样的。<br/> <img src="./main.jpg"> </body> </html> Salin selepas log masuk |
首先关闭apache的keep-alive参数,打开httpd.conf。
打开浏览器访问apache。使用netstat命令查看连接状态。
#netstat –nt|grep –i ’80′
可以看到四个连接,因为本地访问速度很快,只能抓取到TIME_WAIT得状态。那一个test.html网页为什么会有四个连接呢?
看test.html的内容可以知道有:
1,main.css 文件
2,mian.js 文件
3,main.jpg 图片
4,本身的test.html文件
所以有四个连接。
再看看关闭apache的keep-alive支持后的连接状态。
重启服务器,浏览器访问test.html,在查看连接。
#service httpd restart
#netstat –nt|grep –i ’80′
可以看到只有一个连接。而且这个连接状态是ESTABLISHED。我们在httpd.conf中设置了keepAlliveTimeout=15,所以连接建立后15秒后才关闭连接。
测试得到的结论
如果关闭apache的keep-alive属性,访问的页面中的(上例中test.html)所有文件,包括js,css,图片等等都要建立新的TCP连接。有多少引用文件就建立多少个连接。具体多少个文件可以使用火狐的BUG工具查看。
上图中最下面的11个请求就是该网页中需要引用的文件数。
如果开启apache的keep-alive属性,访问的页面中的(上例中的test.html)所有文件,包括js,css,图片等等只建立一个TCP连接,按照顺序传输所有数据。所有数据传输完等待KeepAliveTimeout =15秒后再关闭该连接。
网上看到的参考:
假如当前Apache每秒响应100个用户访问,KeepAliveTimeOut=5,此时httpd进程数就是100*5=500个(prefork模式),一个httpd进程消耗5M内存的话,就是500*5M=2500M=2.5G,夸张吧?当然,Apache与Client只进行了100次TCP 连接。如果你的内存够大,系统负载不会太高,如果你的内存小于2.5G,就会用到Swap,频繁的Swap切换会加重CPU的Load。
现在我们关掉KeepAlive,Apache仍然每秒响应100个用户访问,因为我们将图片、js、css等分离出去了,每次访问只有1个 request,此时httpd的进程数是100*1=100个,使用内存100*5M=500M,此时Apache与Client也是进行了100次 TCP连接。性能却提升了太多。
浏览器的连接超时
每个浏览器都有默认的连接超时时间。IE6的默认时间为60分钟。
这个值可以通过注册表修改。
1,打开注册表:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings。
2,增加一个DWORD值的项,命名为ReceiveTimeout,设置1000。该值的默认单位是毫秒,这里设置的1秒时间。
从浏览器开始访问网站开始,1秒后关闭连接。(设的值有点极端,但是方便展示)。
重启浏览器访问网站。
服务端 | 虚拟机上的Centos |
客户端 | 本机上IE6浏览器 |
服务端地址 | 192.168.212.128 |
客户端地址 | 192.168.212.1 |
访问的文件index.php | <?php echo date('H:i:s',time()); sleep(10); ?> Salin selepas log masuk |
可以看到浏览器显示找不到服务器,但是访问刚才的test.html是可以访问的。
访问index.php显示连接不成功。因为index.php中sleep(10)延迟10秒的函数。而IE6的连接超时时间为1秒。所以就连接失败了。
访问test.hml可以成功连接。因为是访问本地服务器,传输速度很快,在IE6的1秒超时时间之内就已经传完全部数据了。
测试得到的结论
IE6的默认连接超时时间为60分。可以通过注册表中ReceiveTimeout值修改该值。
实际作用:使用IE6往服务器上传一个大文件,如果上传时间超过60分钟就会断开连接。
这也是为什么有些网站要专门开发active插件来实现IE6的大文件上传了。用户是不会主动修改这个值的。
apache的连接超时
看apache的配置文件可以看到有个timeout值。
有人会以为这个是apache的连接超时参数。
我们把它设置为timeout =1访问index.php。
看到还是可以访问的,那么这个timeout不是apache的连接超时时间。timeout是apache收到上一个请求和后面一个请求到来之间的最大值。您可以查看浏览器与apache通讯中的TCP连接状态迁移更加准确的明白timeout的值。
那么apache的连接超时时间到底是多少?是什么参数控制呢?
答:apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。
那么服务端是什么控制了浏览器和apache之间的最大连接超时时间呢?
答:linux
测试得到的结论
apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。
linux的连接超时
在linux的系统配置中可以到关于连接时间的有这两个参数。
#sysctl -a|grep time
一个是限制FIN_WAIT状态的超时时间,
一个是限制keepalive连接的超时时间。
结论
linux的默认配置下也没控制浏览器和apache连接超时的参数,只有通过linux的防火墙才能控制apache和浏览器之间连接的最大连接时间。
PHP的操作超时
打开php.ini可以看到两个参数。
max_execution_time:一个php程序执行的最长时间。
max_input_time:一个表单提交的最长时间。
这两个值很重要。我们做个测试:
服务端 | 虚拟机上的Centos |
客户端 | 本机上IE6浏览器 |
服务端地址 | 192.168.212.128 |
客户端地址 | 192.168.212.1 |
访问的文件index.php | <?php for($i = 0;;$i++){ echo date('H:i:s',time()); echo '<br/>'; flush(); } ?> Salin selepas log masuk Salin selepas log masuk |
max_execution_time | 30 |
访问index.php。
<?php for($i = 0;;$i++){ echo date('H:i:s',time()); echo '<br/>'; flush(); } ?>
30秒后IE死掉了。为什么呢?答:index.php中有死循环。执行到max_execution_time=30秒后php停止了操作。浏览器这边死掉了。
总结
如果从头到尾看完上面的内容,会得出如下结论:
1,在客户端,浏览器控制着浏览器和apache的最大连接超时时间。
2,在服务端(不打开防火墙),linux和apache都不能控制最大连接超时时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接超时时间。
3,在服务端(打开防火墙),linux上的防火墙和php,mysql等共同控制浏览器和apache的最大连接超时时间。
4,这里的浏览器和apache的最大连接超时时间包括TCP连接中的所有状态超时时间的综合。
更多Apache的相关技术文章,请访问Apache教程栏目进行学习!
Atas ialah kandungan terperinci php如何与apache连接超时. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Untuk menubuhkan direktori CGI di Apache, anda perlu melakukan langkah-langkah berikut: Buat direktori CGI seperti "CGI-Bin", dan memberikan kebenaran menulis Apache. Tambah blok arahan "Scriptalias" dalam fail konfigurasi Apache untuk memetakan direktori CGI ke url "/cgi". Mulakan semula Apache.

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

Langkah-langkah untuk memulakan Apache adalah seperti berikut: Pasang Apache (perintah: sudo apt-get pemasangan apache2 atau muat turun dari laman web rasmi) Mula Apache (linux: Sudo Systemctl Mula Apache2; Windows: Klik kanan "Apache2.4" Perkhidmatan dan pilih "Mula") Boot secara automatik (Pilihan, Linux: Sudo Systemctl

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

Apabila port Apache 80 diduduki, penyelesaiannya adalah seperti berikut: Cari proses yang menduduki pelabuhan dan tutupnya. Semak tetapan firewall untuk memastikan Apache tidak disekat. Jika kaedah di atas tidak berfungsi, sila buat semula Apache untuk menggunakan port yang berbeza. Mulakan semula perkhidmatan Apache.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.
