PHP和Javascript Longpolling

时间:2017-12-22 11:22:59

标签: javascript php ajax apache streaming

Hello StackOverflow社区,

我正在努力实现" Live Logging"在我的一个Web应用程序中,通过打开与我的php后端的异步连接,该后端应该通过echo / print语句不断发送日志数据。

我已经尝试了这个例子" Streaming with Ajax"从这个页面https://www.sitepoint.com/php-streaming-output-buffering-explained/,但它不会工作。

HTML + JS

<html>
   <head>
     <title>Ajax Streaming Test</title>
   </head>
   <body>
     <center><a href="#" id="test">Test Ajax Streaming</a></center>
     <script type="text/javascript">
       document.getElementById('test').onclick = function() {
         xhr = new XMLHttpRequest();
         xhr.open("GET", "response.php", true);
         xhr.onprogress = function(e) {
           alert(e.currentTarget.responseText);
         }
         xhr.onreadystatechange = function() {
           if (xhr.readyState == 4) {
             console.log("Complete = " + xhr.responseText);
           }
         }
         xhr.send();
       };
     </script>
   </body>
</html>

PHP文件(刚刚按原样显示在网站上)

<?php for ($i = 1; $i <= 10; $i++): ?>
  <?php sleep(1); ?>
  Count = <?php echo "$i\n"; ?>
  <?php ob_flush(); flush(); ?>
<?php endfor; ?>

我已停用 output_buffering 并启用了 ob_implicit_flush

预期的结果是在您按下&#34;测试Ajax Streaming&#34;按钮,弹出一个警告显示&#34; Count = 1&#34;,然后显示另一个警告&#34; Count = 1,Count = 2&#34;等...

在我的情况下,我只收到一个警告,显示for循环的完整内容。

由于这篇文章是从2014年开始的,我认为从那时起PHP和Apache发生了很大的变化,所以流式传输这样的PHP仍然可能吗?

我使用的是以下版本

PHP版本:PHP 7.1.12

Apache版本:Apache / 2.4.29(Fedora)

0 个答案:

没有答案