我有:
这个简单的代码(sse.php):
<?php
// Set necessary headers
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
$lastId = 0;
while (true) {
$lastId++;
sendMessage($lastId, rand(1, 99));
sleep(1);
}
// Function to send data in format "ticket:price".
function sendMessage($id, $data)
{
echo "id: $id\n";
echo "data: $data\n\n";
ob_flush();
flush();
}如果我要在控制台中运行这个程序:
curl http://localhost/sse.php我会看到我想看到的(例如):
id: 1
data: 41
id: 2
data: 12
id: 3
data: 7
id: 4
data: 10但是如果我试图打开这个链接http://localhost/index.php,我就做不到。它似乎试图连接,但没有成功:

当我重设卷曲(Ctrl+C)时,几分钟后页面就会打开
浏览器中的JS代码也是如此:
var eventSource = new EventSource('/sse.php');
eventSource.onmessage = function(e) {
console.log("Пришло сообщение: " + e.data);
};它的作用是:

但我不能再打开一页了。
在eventSource.close()全部正常工作之后。
我怎样才能解决这个问题?我做错了什么?帮帮我,// Sorry for my bad Enlish
PS:
我试图将这行代码从internet添加到apache配置中,但没有做任何更改:
<IfModule mpm_worker_module>
ServerLimit 250
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 32
MaxRequestWorkers 8000
MaxConnectionsPerChild 10000
</IfModule>更新
我试着用另一个设备连接到服务器。
curl http://localhost/sse.php上运行这个命令,这会导致浏览器出现问题。http://192.168.0.1/,它打开时没有任何问题。我认为apache或docker限制了每个客户端的连接,但在web上找不到任何信息.
更新2更多信息:
发布于 2017-12-12 17:56:15
找到解决办法!如果遇到这样的问题,请尝试禁用xDebug并关闭会话session_write_close()。PHP锁定一个连接的会话写入,这导致了这个问题
发布于 2017-12-12 16:34:27
根据同花顺的文档,输出需要超过一些字节才能真正刷新到浏览器。在调用echo strpad(' ', 2048);之前尝试添加类似flush()的内容
https://stackoverflow.com/questions/47777294
复制相似问题