gpt4 book ai didi

php - 使用服务器发送的事件和 php session

转载 作者:行者123 更新时间:2023-12-04 18:08:32 25 4
gpt4 key购买 nike

我在我的项目中使用服务器发送的事件,其中 JS 正在调用 PHP 页面,比如说 eventserver.php,它基本上由一个无限循环组成,它检查一个事件是否存在$_SESSION 变量。在我的第一个实现中,这导致我的网站挂起,因为事件服务器锁定了 session 并且直到超时到期才释放它;但是,我设法通过使用 session_write_lock() 和锁定/解锁 session 来解决这个问题session_start() 不断循环。

这实际上导致了很多 PHP 警告(在 Apache error.log 上)说“无法发送 session 缓存限制器 - header 已发送”、“无法发送 session cookie”等等。

在这里发布一些代码

session_start();

header('Cache-Control: no-cache');
header('Content-Type: text/event-stream');

class EventServer
{

public function WaitForEvents( $eventType )
{
// ... do stuff

while( true )
{
// lock the session to this instance
session_start();

// ...check/output the event

ob_flush();
flush();

// unlock the session
session_write_close();
sleep( 1 );
}
}
}

为什么会这样?

最佳答案

我正在做与 OP 相同的事情并遇到相同的问题。其中一些答案不理解 eventSource 应该如何工作。我的代码与您的代码相同,并使用 session 变量来了解用户所在的 View 驱动在服务器触发时返回哪些数据。它是实时协作应用程序的一部分。

我只是在 session_start() 前添加了一个 @ 来抑制日志中的警告。不是真正的修复,但它可以防止日志填满。

或者,不确定它对您的应用程序有多好,但是您可以使用 ajax 将您正在监视的 session 变量写入数据库,然后您的 eventSource 脚本可以监视数据库中的更改,而不必启动 session 。

关于php - 使用服务器发送的事件和 php session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20163305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com