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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
第六节--访问属性和方法
Nov 16 PHP
php中变量及部分适用方法
Mar 27 PHP
PHP高级OOP技术演示
Aug 27 PHP
PHP 编写大型网站问题集
May 07 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
PHP链表操作简单示例
Oct 15 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP7创建销毁session的实例方法
Feb 03 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函数,php爱好者站推荐
2007/03/19 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
使用PHP开发留言板功能
2019/11/19 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
创建文明学校实施方案
2014/03/11 职场文书
主持词开场白
2014/03/17 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript