Живая статистика / инкрементатор через отметку времени - PullRequest
4 голосов
/ 06 января 2012

У меня странная проблема, и я не знал, как произнести название.

Что я пытаюсь сделать:

Я хочу отслеживать промежуточный итог и хочу, чтобы этот промежуточный итог обновлялся в реальном времени на моей странице каждую секунду. Я не пытаюсь отслеживать посетителей, это будет отслеживать что-то странное, вроде «количества клеток крови в вашем теле прямо сейчас!» Вот веб-сайт, который делает то, что я хочу, но они делают это в jquery, я пытаюсь сделать это в JS, чтобы свести JS-файлы к минимуму. http://www.usagain.com/ (левая сторона)

Как я это делаю:

У меня есть файл JS с AJAX, который связан с файлом PHP, и этот файл PHP открывает текстовый файл -> захватывает число -> увеличивает его на 1 -> отправляет указанное число обратно в JS -> обновляет номер в HTML -> и PHP обновляет текстовый файл -> закрыть текстовый файл.

Моя проблема:

Счетчик работает, он увеличивается, но проблема в том, что если у меня 2 браузера, работающие на одной странице, число увеличивается на 2. Если у меня 3 браузера; число будет увеличиваться на 3 и так далее. Я думаю, что это как-то связано с записью в файл, но я не уверен, как это исправить.

Мой код

HTML / CSS / Javascript / AJAX

<html>
<head>
<title>Counter</title>
<script language="javascript" src="../jquery1.6.js"></script>
<script type="text/javascript">

    function addCommas(nStr) //http://www.mredkj.com/javascript/nfbasic.html -- Source
    {
        nStr += '';
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? '.' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
        }
        return x1 + x2;
    }

    function getNum()
    {
        $.post('test.php', function(data){
            $('#counter').html(addCommas(data));
        })
    }   
    setTimeOut(getNum, 1000);
</script>
<style type="text/css">
    #counterContainer{color: #52504D;font-family:Verdana, Geneva, sans-serif;font-weight:bold;font-size:15px;position:relative;top:22px;}
    #counter{color: #1E7EC8; font-size: 25px;letter-spacing:1px;}
</style> 
</head>
<body onload="getNum()">
    <div id="counterContainer">
        <div id="counter"><!--Counter Goes Here, Do Not Disturb--></div>
    </div>
</body>
</html>

PHP-файл

<?php
    $fp = fopen("staticNum.txt", "r+");
    flock($fp, LOCK_EX);
    $num = fgets($fp, 11);
    $num = intval($num)+1;

    echo $num;

    fseek($fp, 0, SEEK_SET);
    fputs($fp, "$num");
    flock($fp, LOCK_UN);
    fclose($fp);
?>

Мой текстовый файл просто содержит этот номер:

10000100260

Любые предложения будут великолепны. Моей первой мыслью была база данных, но потом я решил, что у меня возникнет та же проблема. Я действительно хочу держаться подальше от переменных сеанса и файлов cookie, хотя наверняка, поскольку не думаю, что они необходимы Хотя я могу ошибаться.

Бонусные баллы, если вы можете найти способ решить мою проблему без базы данных! (Не совсем, хотя я не администратор: (

Ответы [ 3 ]

1 голос
/ 08 января 2012

Вместо того, чтобы считать, попробуйте с отметкой времени:

value = ( timestamp % ((max_limit - min_limit) / 1.5 ) ) * 1.5 + min_limit
1 голос
/ 06 января 2012

Я не совсем уверен, как будет работать ваш счетчик - откуда он отсчитывает и т. Д., Но я думаю, что это должно вам помочь:

var init_count = 10000100260; //starting heartbeats
var count_start = 1325803921; //timestamp of when initial count was taken

function update_count()
{
    var utstamp = new Date();
    utstamp = Math.round(utstamp.getTime()/1000); //get current unix timestamp
    var newcount = (utstamp - count_start) + init_count; //add seconds passed since initial count, to the initial count
    $("#beat_count").html(newcount); //set the contents of your element to the new number
}

var ticker = setInterval(update_count,1000); //call the above function every 1000 milliseconds (1 second)

Вы можете получить свою начальную метку времени, используя формуздесь: http://www.functions -online.com / mktime.html

Это может вызвать больше вопросов, чем ответов, но дайте мне знать в любом случае!

0 голосов
/ 06 января 2012

Счетчик работает, он увеличивается, но проблема в том, что если у меня 2 браузера, работающие на одной странице, число увеличивается на 2. Если у меня 3 браузера; число будет увеличиваться на 3 и так далее. Я думаю, что это как-то связано с записью в файл, но я не уверен, как это исправить.

Я предполагаю, что у вас работает несколько браузеров на пользователя. Счетчик работает, но вы думаете, что пользователь - это браузер. Поскольку каждый браузер будет вызывать увеличение числа, то, что вы описываете, является не проблемой, а просто фактом, как работает ваш скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...