卡在永恒的循环

我有:

  • 最后的docker和docker组成
  • PHP 5.6的Apache

这个简单的代码(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 ,我不能这样做。 似乎它试图连接,但没有任何成功:

永恒的加载

而当我重置curl( 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:

我试图从互联网添加到Apacheconfiguration,没有什么改变:

 <IfModule mpm_worker_module> ServerLimit 250 StartServers 10 MinSpareThreads 75 MaxSpareThreads 250 ThreadLimit 64 ThreadsPerChild 32 MaxRequestWorkers 8000 MaxConnectionsPerChild 10000 </IfModule> 

UPDATE

我尝试使用其他设备连接到服务器。

  • 我在PC curl http://localhost/sse.php上运行这个命令,导致浏览器出现问题。
  • 我在手机浏览器中打开http://192.168.0.1/ ,打开时没有任何问题

我认为Apache或docker工人限制每个客户端的连接,但无法find任何信息在networking上…

更新2更多信息:

  • /etc/apache2/apache2.conf中
  • /etc/apache2/conf-available/site-configuration.conf
  • /etc/apache2/sites-available/000-default.conf

根据flush的文档,输出需要比只是一些字节更长的时间才能真正被刷新到浏览器。 尝试添加像echo strpad(' ', 2048); 在调用flush()之前

find解决scheme ! 如果遇到这样的问题,请尝试禁用xDebug并closures会话session_write_close() 。 PHPlocking会话写入一个连接,这是造成这个问题