PHP的同时循环高CPU使用率

安德鲁

我有一台ipcamera,它/video/feed/1.jpg以大约5fps的速度被写入(安装为ramdrive)。如果连接不良,有时可能会低于1 fps。我试图每500毫秒更新一次浏览器中的图像,但是我有两个目标:

  • 我不希望服务器输出相同的图像(如果尚未由相机更新)。
  • 如果相机尚未完成写入,我不想输出部分图像。

我试图通过创建图像的md5并将其存储在会话中来实现此目的,如果在下一个浏览器请求中md5不变,则服务器会循环运行直到md5不同为止。服务器也将循环播放,直到md5与上次加载时间匹配为止,这样我可以确定相机已完成创建图像。

该过程按预期工作,但CPU使用率却很高,因此我正在寻求有关改进的建议。

test.php

<?php
session_start();
$imgFile = '/video/feed/1.jpg';
$lastImg = $_SESSION['image'];
$imgMd5 =0;
do {
    sleep(.2);
    $img = (file_get_contents($imgFile));
    $lastMd5 = $imgMd5;
    $imgMd5 = md5($img);
    if ($lastMd5 != $imgMd5) {
    continue;
    }
    if ($imgMd5 != $lastImg) {
        break;
    }
} while (0 == 0);
header("Content-type: image/jpg");
$_SESSION['image'] = md5($img);
echo $img;
exit;
?>

JS

      <script>
            img = new Image
            function f() {
                img.src = "test.php?rnd=" + Date.now();
                img.onload = function() {
                    feed.src = img.src;
                    setTimeout(function() {
                        f();
                   }, 500);
                };
                img.onerror= function(){
                    setTimeout(function() {
                        f();
                    }, 500);
                };
            }
            f();
        </script>
安德鲁

我真正需要的是 usleep(200000)

sleep(.2) 没有按我预期的那样工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章