php中session阻塞怎么解决

最近小编在开发项目的时候遇到一session阻塞问题。使用yii2框架开发一个采集系统,通过ajax异步把采集好的数据写入表中,因为数据量大执行起来比较耗时。另一个ajax轮询查看入库状态。在第一个ajax没有返回结果前,其它ajax操作是一直是等待中,直到第一个ajax执行完毕其它ajax才继续执行。然后网上一查,有人和我有一样的问题,下面把该解决方法分享出来。

当同时向服务端发现若干HTTP请求,有时你会发现这些请求可能并非并发完成的,服务器对这些请求进行了排队处理,产生了所谓的PHP阻塞现象。最有可能是脚本进行了session数据的读写,PHP中session默认使用文件系统进行存储的,当进行读写session文件操作时,存储session的文件处于锁定状态,此时其他需要读写session数据的请求需要等待前一个请求完成后才会进行,从而导致PHP阻塞的发生。

解决方法:

php有自带的session_write_close函数,作用是Write session data and end session,也就是写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时 候,在执行完以后,马上调用session_write_close函数即可。

相关推荐