gpt4 book ai didi

php - 服务器发送的事件 PHP 阻塞流

转载 作者:可可西里 更新时间:2023-10-31 23:05:11 25 4
gpt4 key购买 nike

我不知道这是否是一个问题,但是,我使用服务器发送事件而不是 ajax 从 php 到 javascript 进行提要。一切正常,除了在服务器端休眠,保持事件源阻止网页流。我做了一个非常简单的代码来测试,我得到了相同的结果。

我会把代码放在上面。

服务器发送事件挂起页面流量?它不像 ajax 那样执行异步请求吗?

主要问题是:服务器发送的事件挂起代码流,我的意思是,页面等待EventSource保持代码执行,每次eventSouce打开连接或接收消息。当我在服务器端代码上休眠时,我可以清楚地看到这一点,我的页面停止休眠时间,运行 3 秒,然后再次挂起。当我进行 ajax 调用时,调用是异步的,因此即使我在服务器端休眠,代码也会在后台使用 ajax 继续运行。希望你现在能明白=p

测试.php

                    @set_time_limit(0);
//send the proper header
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
if(function_exists('apache_setenv')){
@apache_setenv('no-gzip',1);
}
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
for($i = 0; $i < ob_get_level(); $i++){
ob_end_flush();
}
ob_implicit_flush(1);

$startedAt = time();

do {

$time = time();
echo "id: $startedAt " . PHP_EOL;
echo "data: {\n";
echo "data: \"msg\": \"$time\", \n";
echo "data: \"id\": $startedAt\n";
echo "data: }\n";
echo PHP_EOL;
//@ob_flush();
@ob_end_flush();
@flush();
usleep(0.5*1000000);
} while(true);

HTML

if(!!window.EventSource) {
var source = new EventSource('test.php');
source.addEventListener('open', function(event) {
console.log('open');
}, false);
source.addEventListener('message', function(event) {
var data = JSON.parse(event.data);
console.log(event.data);
},false);
}

最佳答案

正如 Daniel 自己回答的那样,问题可能出在 session 锁定上。

session_write_close(); 

也解决了我的问题。

关于php - 服务器发送的事件 PHP 阻塞流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186933/

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