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 相关文章推荐
PHP安全配置
Oct 09 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
layui数据表格自定义每页条数limit设置
Oct 26 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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写的带缓存数据功能的mysqli类
2012/09/06 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
js实现带箭头的进度流程
2020/03/26 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python实现简单遗传算法(SGA)
2018/01/29 Python
python实现日常记账本小程序
2018/03/10 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
python selenium xpath定位操作
2020/09/01 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
医大实习自我鉴定
2013/12/07 职场文书
文明市民先进事迹
2014/05/15 职场文书
报效祖国演讲稿
2014/09/15 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
复兴之路观后感
2015/06/02 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis