我使用SSE将一些数据发送到浏览器(网络聊天)。我遇到了一些问题。SSE工作正常,但其他请求没有。所有请求都停留在挂起状态很长一段时间,甚至点击链接到另一个页面不工作,直到浏览器停止按钮会被按下。我在PHP5.4.4、5.4.45和Apache2.4和2.2上测试了它.结果完全一样。我试图在apache.conf中更改mpm设置,但没有什么改变。有什么能帮到我的吗?
这是控制器的操作:
/**
* @return string
*/
public function actionIndex()
{
/** @var SSE $sse */
$sse = \Yii::$app->sse;
$sse->addEventListener('message', new MessageEventHandler());
$sse->start();
}这是消息处理程序:
class MessageEventHandler extends SSEBase
{
public function check()
{
return true;
}
public function update()
{
return 'New message!';
}
}浏览器端:
var sseObject = $.SSE('/notifier', {
events: {
chat_message: function (e) {
console.log(e.data);
}
}
});
sseObject.start();发布于 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()。
https://stackoverflow.com/questions/49013594
复制相似问题