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

 更新时间:2017年08月07日 11:18:17   作者:leezhxing  
这篇文章主要介绍了php基于session锁防止阻塞请求的方法,结合实例形式分析了phpsession锁的使用及防止阻塞请求的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • PHP7扩展开发教程之Hello World实现方法示例

    PHP7扩展开发教程之Hello World实现方法示例

    这篇文章主要介绍了PHP7扩展开发教程之Hello World实现方法,结合实例形式较为详细的分析了针对php7扩展的源码下载、设置、代码编辑及测试运行相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • PHP实现视频文件上传完整实例

    PHP实现视频文件上传完整实例

    这篇文章主要介绍了PHP实现视频文件上传的技巧,包含了PHP配置信息的设计及大文件的处理,需要的朋友可以参考下
    2014-08-08
  • php下保存远程图片到本地的办法

    php下保存远程图片到本地的办法

    有些时候我们看到网络上有一些漂亮的图片,而又不想手动去保存下来,尤其是大量的这样的图片,那这个时候我们需要写一段程序来帮助我们完成这个工作。
    2010-08-08
  • 深入理解PHP中的static和yield关键字

    深入理解PHP中的static和yield关键字

    这篇文章主要给大家介绍了关于PHP中static和yield关键字的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用php具有一定的参考学习价值,文章需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 隐性调用php程序的方法

    隐性调用php程序的方法

    这篇文章主要介绍了隐性调用php程序的方法,实例分析了通过js文件调用php程序实现计数功能,需要的朋友可以参考下
    2015-06-06
  • PHP中数组的三种排序方法分享

    PHP中数组的三种排序方法分享

    PHP中数组的三种排序方法,主要包括冒泡排序法、选择排序法、插入排序法,需要的朋友可以参考下
    2012-05-05
  • PHP中4个加速、缓存扩展的区别和选用建议

    PHP中4个加速、缓存扩展的区别和选用建议

    这篇文章主要介绍了PHP中eAccelerator、memcached、xcache、APC等4个加速、缓存扩展的区别和选用建议,需要的朋友可以参考下
    2014-03-03
  • php中防止伪造跨站请求的小招式

    php中防止伪造跨站请求的小招式

    伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。
    2011-09-09
  • Discuz 模板语句分析及知识技巧

    Discuz 模板语句分析及知识技巧

    Discuz模板语句分析及知识技巧,其实大家可以多研究下各种程序cms系统,不过前提是,大家的基础已经不错了。
    2009-08-08
  • 浅谈COOKIE和SESSION区别

    浅谈COOKIE和SESSION区别

    在PHP面试中经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
    2015-07-07

最新评论