За последние 24 часа нас посетили 9263 программиста и 459 роботов. Сейчас ищут 100 программистов ...

сколько времени пользователь провел на странице

Тема в разделе "PHP для профи", создана пользователем hack-dag, 23 авг 2017.

  1. Abyss

    Abyss Активный пользователь

    С нами с:
    12 дек 2015
    Сообщения:
    1.275
    Симпатии:
    214
    Адрес:
    Default city
    @romach хочется слить тред во флеймопарашу, но чет я устал спорить с дураками.
     
  2. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    кстати, довольно странное нежелание читать ТЗ
    Почувствуйте разницу, как говорится.
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    @Abyss всегда есть надежда, что топикстартер таки услышит и поймет как сделать правильно, либо хотя бы в какую сторону копать )

    Это опыт, а не странное желание. Многие требования порождаются желанием заказчика умозрительно решить проблему, без какого-либо практического, а часто и даже теоретического опыта в теме. Потому перевод разговора в русло "давайте не будем думать о том как делать, а остановимся на том что нужно сделать" обычно резко повышает логичность ТЗ.

    И таки я дал ответ даже в рамках задачи, перечитайте ещё раз.
     
    artoodetoo нравится это.
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.939
    Симпатии:
    728
    и всё же дрючить сервак каждую секунду не разумно.
    Даже если сервак не потухнет. Зачем платить больше?
    Вешать нодЖСы с монгами - тоже слишком заморочено, ради такой мелочи.

    Отправлять запросы каждые 5, а лучше 10 сек.
    И ничего страшного, что пользователь просидел 867 секунд, а за считалось только 860.
    7 секунд можно скинуть на чесание студентом гениталий (это со скидкой. там на много больше секунд).

    А если еще более здраво посмотреть на эту ситуацию, то вся эта затея в корне идиотская.
    Знания проверяются не так.

    Но в конце концов - вообще похер.
    Тебе платят за твоё время и ладно.
    Хотят купить супер сервак ради отиотских секунд и заплатить кучу денег разрабам - пусть покупают и платят.
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    Там максимум на один вечер, составить строк 100 кода из примера по socket.io и либы для mysql.
     
  6. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    могу поспорить, что у этого вуза хостинг какой-нибудь рег.ру. Хрен вы там что сделаете, миллионэры. С подходом "Да я сделаю все что угодно, только дорого" и я сделаю. Тупо вас, "гениев" за 10% найму, будете херачить за хлебушек, никуда не денетесь. Вы в реальности сделайте, а не мечтах своих, где нет серваков выделенных с 50 гигами памяти и кол-во запросов к БД ограничено и декану еще немного спиздить надо, а админом там студент за неуспеваемость хуячит. Смешные вы, "теоретики" капец, слов нет
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    TeslaFeo и Алекс8 нравится это.
  8. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.655
    Симпатии:
    344
    а со стороны сервера что сделал?) покажи))
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    Ничего ) Как и писал ранее, нахватал кусков из доков )

    Но если интересно, то вот:
    Код (Javascript):
    1. const fs = require('fs');
    2.  
    3. const app = require('http').createServer((req, res) => {
    4.     fs.readFile(__dirname + '/index.html',
    5.         function (err, data) {
    6.             if (err) {
    7.                 res.writeHead(500);
    8.                 return res.end('Error loading index.html');
    9.             }
    10.             res.writeHead(200);
    11.             res.end(data);
    12.         });
    13. });
    14. app.listen(8080);
    15. const io = require('socket.io')(app);
    16.  
    17. let storage = {};
    18. if (fs.existsSync('storage.json')) {
    19.     storage = JSON.parse(fs.readFileSync('storage.json'));
    20. }
    21.  
    22. let counter = 0;
    23. io.on('connection', function (socket) {
    24.     socket.on('timer', function (data) {
    25.         counter++;
    26.         let clientIp = socket.request.connection.remoteAddress;
    27.         if (storage[clientIp] === undefined) {
    28.             console.log('New IP:' + clientIp);
    29.             storage[clientIp] = {last: Date.now(), counter: 0, ip: clientIp};
    30.         }
    31.         let diff = Date.now() - storage[clientIp].last;
    32.         if (diff < 2000) {
    33.             storage[clientIp].counter += Date.now() - storage[clientIp].last;
    34.         }
    35.         storage[clientIp].last = Date.now();
    36.         socket.emit('result', { my: storage[clientIp] });
    37.     });
    38. });
    39.  
    40. setInterval(() => {
    41.     fs.writeFileSync('storage.json', JSON.stringify(storage));
    42. }, 10000);
    43. setInterval(() => {
    44.     process.stdout.write(counter + "\r");
    45. }, 1000);
    собсно, говнокодец ещё тот, но таки попробуйте это уронить )
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.939
    Симпатии:
    728
    @romach красава)
    --- Добавлено ---
    можно даже вкладку закрыть и открыть и будет работать)
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.939
    Симпатии:
    728
    и до сих пор помнит, сколько я сидел)
     
  12. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    Тест на скорую руку показал:
    1. DO, droplet за $5 в месяц, одно ядро, 512 мб оперативки.
    2. 1000 соединений, в сумме отправили за минуту ~3500000 сообщений, которые каким-то чудом таки умудрились приняться )
    3. Оперативки ~100Мб, ядро ~90%

    Такие дела.
     
  13. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.655
    Симпатии:
    344
    хочу теперь что то себе сделать на сокетах)) только еще не придумал что)
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    Начни традиционно, с чатика. Ну или простой todo, только что бы изменения отображались у всех и сразу )

    p.s. если что, дроплет удалил. мы, миллионеры, жуть какие жадные, удавимся за 5 баксов в месяц )
     
  15. ArtyGrand

    ArtyGrand Активный пользователь

    С нами с:
    4 мар 2017
    Сообщения:
    7
    Симпатии:
    1
    Код (Javascript):
    1. sendAjaxIn();
    2. window.onbeforeunload = function(){ sendAjaxOut() }
     
  16. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    А почему просто не включить таймер при открытии страници а при закрытии записать данные в бд. Даже на том скрепке типо через сетиниервал раз всекунду обновлять перемунну добовлять +1. А когда он закрывает вкладку то отправить ajax запрос. Меня только одно интересует как ты отследишь что страница закрылась или он ушел с этой. Хотя в теории если помозговать то можнт. Типо повесить на каждую ссылку отправку этого запроса. А вот про закрытие вкладки нужно подумать. Незнаю решили или нет все не читал. Так что пробуй
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    А потом студент такой раз и стал ботаником отправив себе тысячу часов )
     
  18. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну тогда создай сессию и ее увеличивай блин это просто пример реализации. Из за того что ты будешь раз в секунду увеличивать сессию сервер думаю не ляжет. Ну как то так.
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    716
    @Dron-Boy Может стоит перечитать то что написано выше?
     
  20. GoldenFILL

    GoldenFILL Активный пользователь

    С нами с:
    16 мар 2017
    Сообщения:
    11
    Симпатии:
    1
    Пусть профессор заставит кликать студентов по каждому заголовку абзаца, по мере прочтения, а потом перед закрытием страницы студенты кликают по ссылке <a>Изучил. Можно в туалет?</a> Массивчик с временными итервалами кликов можно отправить на сервер.
     
  21. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    175
    Симпатии:
    4
    Почему не использовать Redis?
     
  22. Motorinyan

    Motorinyan Новичок

    С нами с:
    31 авг 2020
    Сообщения:
    4
    Симпатии:
    0
    1. Авторизовался на сайте
    2. В базу пишем посещеные страницы с датой и временем
    3. Препод смотрит учетку студента где выводим посещеные курсы, уроки и т.д. с временем прибывания, а именно бэкэндом считаем разницу времени посещения этой страницы и временем посещения следущей (если эта страница курс, урок и т.д.)
    4. Если на последнюю страницу курс, урок и т.д. был произведен только вход и не было перехода на следующую то ставим её(го) под (?) или что-нибудь в этом роде.
    5. Пркпод просматривает курс, урок и т.д. где видет кто просматривал и какое время присутствовал.

    Конечно если курс не разбит (пагинация) то большую часть посещеных курсов можно ставить под (?)
     
  23. nikolaevevge

    nikolaevevge Новичок

    С нами с:
    5 июл 2020
    Сообщения:
    15
    Симпатии:
    2
    У меня такое реализовано так что ajax отправляет каждые 5 секунд запрос на сервер, а там уже фиксируется время первого входа и последнего. Тут же географию определяю при первом посещении. Можешь посмотреть в коде как работает например на странице http://blog.ivru.net/?id=1 (в firefox f12 нажимаешь переходишь на вкладку сеть и смотришь). Если в JS будешь копаться там в этом скрипте ещё реализовано подгрузка любых скриптов динамическим способом по инициативе сервера(то есть изначально скрипты не загружаются, но сервер при очередном запросе может сообщить браузеру какой js файл требуется ещё дозагрузить).
     
  24. Motorinyan

    Motorinyan Новичок

    С нами с:
    31 авг 2020
    Сообщения:
    4
    Симпатии:
    0
    Представь, 3000 пользователей сошлись во времени до долей секунды на ajax-запросе, вопрос: какая нагрузка на сервер? Правильно: 3 секунды при минимальном времени выполнения скрипта на одного пользователя. И дело втом, что следующая секунда еще 2500-3000 пользователей, вопрос: время простоя сервера? Правильно: простоя нет и нагрузка максимальная. Так это при рассмотрении обработки процессов не обращая внимания на память и остальные обработки других процессов. Ajax это хорошо, но не всегда...
     
  25. Bit99

    Bit99 Новичок

    С нами с:
    14 окт 2020
    Сообщения:
    51
    Симпатии:
    3
    Почему допустим нельзя сделать так: Зашел пользователь на твою страницу, сохранилось в бд текущее время, на яваскрипте запускаешь счетчик, а по уходу пользователя (типа расфокус или мышка ушла за пределы), фиксируешь время.
    --- Добавлено ---
    Что-то я влез в тему, а до конца и не прочитал все комментарии