php基于session锁防止阻塞请求的方法分析


Posted in PHP onAugust 07, 2017

本文实例讲述了php基于session锁防止阻塞请求的方法。分享给大家供大家参考,具体如下:

说明:

这是一篇参考国外网站http://konrness.com/php5/how-to-prevent-blocking-php-requests/ 的译文,前面一篇文章PHP编程中的Session阻塞问题与解决方法简单分析了php session阻塞的解决方法,这里给出另一种解决方法。

正文:

现代浏览器限制到一个host并发连接的数量一般为4或6。这意味着,如果您的web页面加载几十个来自同一个host的assert file(js、图像、css)时,由于并发数的限制,会产生排队。同样甚至更糟的是,这个问题也会发生在使用了session的php脚本中。

问题:

php的session缺省用文件存储,当请求一个需要操作session的php文件(session_start())时,这个文件是会被第一个操作session的进程锁定,导致其他请求阻塞。其他请求会挂起在session_start()直到session文件解锁。

解决:

由于锁定的session文件直到脚本执行结束或者session正常关闭才会解锁,为了防止大量的php请求(需要使用$_SESSION数据)被锁定,可以在写完session后马上关闭,这样就释放了锁。

关闭session:

session_write_close();

这个技巧非常管用,尤其对于一个处理时间长的脚本。并且这个函数只是关闭了写session,读还是可以的。

// 
session_start();
//可以读写session
$_SESSION['latestRequestTime'] = time();
//关闭session
session_write_close();
//读取session
$twitterId = $_SESSION['twitterId'];

译注:

在php5.4以后,session_set_save_handler 支持了传递SessionHandlerInterface 的方式,第二个参数就是指定session_write_close() 作为回调方法的(缺省就是true),将函数 session_write_close() 注册为 register_shutdown_function() 函数。

用Memcache或者Redis做session的存储,是能解决“锁定”的问题,但处理不好会导致连接数标高(在session操作后如果有耗时操作,连接是不回收的,可以主动在session写操作完成后做session_write_close() 操作)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4实际应用经验篇(6)
Oct 09 PHP
php 数组二分法查找函数代码
Feb 16 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
async和DOM Script文件加载比较
Jul 20 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 #PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 #PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 #PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 #PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 #PHP
php封装的mongodb操作类代码
Aug 06 #PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 #PHP
You might like
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
获取URL文件名后缀
2013/10/24 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
jQuery的框架介绍
2016/05/11 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
利用Psyco提升Python运行速度
2014/12/24 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python读写压缩文件的方法
2020/07/30 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
单位委托书怎么写
2014/08/02 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
工作年限证明范本
2015/06/15 职场文书
工作感言一句话
2015/08/01 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书