首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache + SSE + PHP

Apache + SSE + PHP
EN

Stack Overflow用户
提问于 2018-02-27 16:36:01
回答 1查看 1.3K关注 0票数 0

我使用SSE将一些数据发送到浏览器(网络聊天)。我遇到了一些问题。SSE工作正常,但其他请求没有。所有请求都停留在挂起状态很长一段时间,甚至点击链接到另一个页面不工作,直到浏览器停止按钮会被按下。我在PHP5.4.4、5.4.45和Apache2.4和2.2上测试了它.结果完全一样。我试图在apache.conf中更改mpm设置,但没有什么改变。有什么能帮到我的吗?

这是控制器的操作:

代码语言:javascript
复制
/**
 * @return string
 */
public function actionIndex()
{
    /** @var SSE $sse */
    $sse = \Yii::$app->sse;
    $sse->addEventListener('message', new MessageEventHandler());
    $sse->start();

}

这是消息处理程序:

代码语言:javascript
复制
class MessageEventHandler extends SSEBase
{
    public function check()
    {
        return true;
    }

    public function update()
    {
        return 'New message!';
    }
}

浏览器端:

代码语言:javascript
复制
var sseObject = $.SSE('/notifier', {
    events: {
        chat_message: function (e) {
            console.log(e.data);
        }
    }
});
sseObject.start();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-27 19:46:34

问题可能是会话锁。

默认情况下,PHP将其会话数据写入文件。当向启动会话的PHP脚本(session_start())发出请求时,该会话文件将被锁定。这意味着,如果您的网页向PHP脚本发出许多请求,例如通过Ajax加载内容,那么每个请求都可能锁定会话并阻止其他请求完成。

结合SSE连接是持久的,因此会话将保持锁定。

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

可能的解决方案是在session_write_close()中调用actionIndex()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49013594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档