卡在永恒的循环
我有:
- 最后的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会话写入一个连接,这是造成这个问题