PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-Zend奇怪的行为:当第一个请求仍在运行时,无法处理第二个请求大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用Zend Framework构建聊天功能.
javascript中,我使用ajax通过这样的功能pullAction请求http://mydomain.com/chat/pull

public function pullAction() {

        while ( true ) {
            try {
                $chat = Eezy_Chat::getNewmessage();
                if($chat){
                    $chat->printmessage();
                    break;
                }
                sleep ( 1 ); // sleep 1 secound between each loop
            } catch ( Zend_Db_Adapter_Exception $ex ) {
                if ($ex->getCode () == 2006) { // reconnect db if timeout
                    $dbAdapter = Zend_Db_Table::getDefaultAdapter ();
                    $dbAdapter->closeConnection ();
                    $dbAdapter->getConnection ();
                }
            }
    }
}

该操作将一直运行,直到其他用户发送一些消息为止.
但是,在运行此请求时,我无法转到网站上的任何其他页面.他们所有人都在等待http://mydomain.com/chat/pull完成执行.

我在整个Google上寻找解决方案,但仍然找不到.
谢谢您帮忙.

解决方法:

这听起来像会话锁定.

您使用存储在文件系统上的Session时,PHP将在每个请求上锁定会话文件,并且仅在该请求通过时才将其释放.当文件被锁定时,任何其他想要访问该文件的请求都将挂起并等待.

由于您的聊天脚本将永远循环,以检查是否有新消息,因此会话文件也将被永久锁定,从而阻止同一用户访问需要会话访问权限的站点的不同部分.

一种解决方案是将满足请求所需的所有会话数据加载到内存中,然后尽快使用Zend_Session :: writeClose释放锁.

大佬总结

以上是大佬教程为你收集整理的php-Zend奇怪的行为:当第一个请求仍在运行时,无法处理第二个请求全部内容,希望文章能够帮你解决php-Zend奇怪的行为:当第一个请求仍在运行时,无法处理第二个请求所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: