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

发布时间 - 2026-01-11 02:40:41    点击率:

本文实例讲述了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数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》及《php字符串(string)用法总结》

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


# php  # session锁  # 防止  # 阻塞请求  # php 多进程编程父进程的阻塞与非阻塞实例分析  # 简单介绍PHP非阻塞模式  # PHP实现非阻塞模式的方法分析  # php使用flock阻塞写入文件和非阻塞写入文件的实例讲解  # PHP实现的CURL非阻塞调用类  # 关于PHP中协程和阻塞的一些理解与思考  # PHP编程中的Session阻塞问题与解决方法分析  # 深入解析PHP中的(伪)多线程与多进程  # 深入探究PHP的多进程编程方法  # php多进程中的阻塞与非阻塞操作实例分析  # 解决方法  # 解锁  # 的是  # 这是  # 您的  # 也会  # 相关内容  # 第一个  # 才会  # 这个问题  # 感兴趣  # 第二个  # 给大家  # 更多关于  # 所述  # 写完  # 几十个  # 回调  # 为了防止  # 一篇文章 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 实例解析angularjs的filter过滤器  Laravel怎么使用Intervention Image库处理图片上传和缩放  油猴 教程,油猴搜脚本为什么会网页无法显示?  在centOS 7安装mysql 5.7的详细教程  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel怎么实现模型属性的自动加密  怎样使用JSON进行数据交换_它有什么限制  文字头像制作网站推荐软件,醒图能自动配文字吗?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  如何破解联通资金短缺导致的基站建设难题?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Python3.6正式版新特性预览  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel怎么调用外部API_Laravel Http Client客户端使用  微信小程序 闭包写法详细介绍  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何快速选择适合个人网站的云服务器配置?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Android okhttputils现在进度显示实例代码  如何解决hover在ie6中的兼容性问题  Python文件流缓冲机制_IO性能解析【教程】  怎么用AI帮你为初创公司进行市场定位分析?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel如何处理文件下载请求?(Response示例)  深圳网站制作平台,深圳市做网站好的公司有哪些?  网易LOFTER官网链接 老福特网页版登录地址  jquery插件bootstrapValidator表单验证详解  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何实现数据库事务?(DB Facade示例)  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  javascript中的try catch异常捕获机制用法分析  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  微信h5制作网站有哪些,免费微信H5页面制作工具?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  bootstrap日历插件datetimepicker使用方法  如何彻底删除建站之星生成的Banner?  如何利用DOS批处理实现定时关机操作详解  在Oracle关闭情况下如何修改spfile的参数  个人网站制作流程图片大全,个人网站如何注销?  详解CentOS6.5 安装 MySQL5.1.71的方法  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复