PHP的SESSION导致长连接阻塞
来源:互联网 发布:txt数据导入origin 编辑:程序博客网 时间:2024/06/15 19:43
最近在开发一个网页版的即时聊天程序,后端采用的PHP。程序会定时轮训服务器,查询有没有新的消息。轮询采用的是长连接。
然而遇到一个很奇怪的现象,每次刷新页面总是阻塞很久,一开始考虑难道是服务器的问题?可我是在本地测试的,应该不可能是性能瓶颈。然后反复刷新发现了一个规律:
每次刷新阻塞的时间刚好和轮询长连接超时时间一致。
总结:是轮询时,此链接阻塞了相同的域名的链接。浏览器会等到此链接技术后,才继续加载下一个链接。所以刷新操作也被延后了。
虽然知道如此,可是 why?如果阻塞是必然的话,那么一个网页加载时那么多请求并没有相互阻塞啊!
看来一定是哪里不对。
最后各种Baidu---原来是万恶的SESSION!
php的session缺省用文件存储,当请求一个需要操作session的php文件(session_start())时,这个文件是会被第一个操作session的进程锁定,导致其他请求阻塞。其他请求会挂起在session_start()直到session文件解锁。
所以,才造成了请求被阻塞。
那么解决方案也也就出来了,如果长连接的页面只需要查询SESSION而需要设置,那么久打开后直接关闭SESSION的写模式。文件就会被解锁:
<?phpsession_start();session_write_close();这个是测试有效的。
当然还有一个解决方案,那就是将php的session改为数据库存储。不过这种我并未测试,因此不贴代码了。
阅读全文
0 0
- PHP的SESSION导致长连接阻塞
- PHP长连接导致mysql连接数打满
- 关于启用sessionState外部存储,导致IHttpAsyncHandler长连接阻塞线程的问题
- 关于启用sessionState外部存储,导致IHttpAsyncHandler长连接阻塞线程的问题
- php的session阻塞问题
- PHP的Session阻塞问题探讨
- PHP session阻塞页面的问题
- php 长连接--php
- 一次socket长连接运行导致的性能问题
- PHP数据库长连接mysql_pconnect的细节
- PHP数据库长连接mysql_pconnect的细节
- 长连接 短连接 异步 同步 )阻塞与非阻塞
- PHP实现长连接
- PHP实现长连接
- php长连接
- PHP长连接实现
- php长连接(笔记)
- php 实现长连接
- HashMap和ArrayMap的区别
- Spring框架的整理
- 在Ubuntu环境下配置Hadoop伪分布式模式运行环境
- 划水
- [cocos2dx_Lua]自定义本地化数据
- PHP的SESSION导致长连接阻塞
- 分析HashCode
- python设计模式之迭代器
- 使用公式C=(5/9)(F-32)打印下列华氏温度与摄氏温度对照表。
- 2017年第五届北京大数据与分析创新峰会将于11月在北京召开
- 虚拟机连接到Oracle数据库 忘记密码了 可以借鉴
- 微软,我想C的不只是你妈,还有你爸
- 如何知道mcu执行某一段程序用了多长时间?
- iOS开发之Debug之unrecognized selector sent to instancexxx