За последние 24 часа нас посетили 20046 программистов и 1002 робота. Сейчас ищут 346 программистов ...

Чат. Ajax. Загрузка и обновление фото в чате.

Тема в разделе "PHP для новичков", создана пользователем AlexProg, 14 апр 2020.

Метки:
  1. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Всем добра!

    Обычный чат на jQuery, обновление и отправка через Ajax.
    НО!
    Каждые 3 секунды обновление новых сообщений и если есть в нём картинка/фото, то вставляем в сообщение. Но каждые 3 секунды это фото блымает/моргает, т.е. каждый раз загружается.

    Что можно с этим сделать?

    Спасибо!
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код покажи, даже интересно. Ведь давно придумали именно для этого вебсокеты
    https://github.com/walkor/Workerman
     
  3. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Отправки или загрузки?

    Ха! Да, но там нужно разбираться. Делаю на том, на чём умею.
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Загрузки на страницу.
     
  5. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Код (Javascript):
    1. setInterval(load,3000);
    2.  
    3. function load(){
    4.         var id_dialog = $("#id_dialog").val();
    5.         $.ajax({
    6.             url: "/ajax",
    7.             dataType: "json",
    8.             type: "POST",
    9.             data: { type: "dialogi", module: "loading", id_dialog: id_dialog },
    10.             success: function(data){
    11.                 console.log(data);
    12.                 appendComments(data);
    13.             }
    14.         });
    15.     }
    function appendComments(data) {
    Просто в цикле выводит сообщения.
    --- Добавлено ---
    Запостил.
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    appendComments показывайте
    --- Добавлено ---
    Короче, я так понял вы каждый раз опрашивая сервер получаете вообще все сообщения которые там есть?
    А почему бы не брать данные только за последние 3 секунды?
    --- Добавлено ---
    И скорее всего вы обновляете данные так
    Код (Javascript):
    1. $( "dom" ).html(data);
    А если будете брать с сервера только последнее. то надо будет так:
    Код (Javascript):
    1. $( "dom" ).append(data);
     
  7. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Так и есть. Беру последние 5 допустим. Из них два и фото.
    Вот эти фото и блымают ((
     
  8. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Зачем вы грузите последние если они уже были загружены?
     
  9. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    UPD:
    Только у меня prepend, но разницы особой нет. Картинки постоянно грузятся. Расположены на нашем сервере.
    --- Добавлено ---
    Хм... Как тогда это различить? Кто загружен, а кто нет. :)
     
  10. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Ну подумайте, самое правильное это отталкиватся от даты загрузки.
    --- Добавлено ---
    То есть, допустим последний раз данные на сервере обновлялись час назад. Текущий клиент сделал последний опрос этих данных 15 минут назад. Значит ему ничего на свою страницу обновлять не надо. Естественно если он обновил страницу то все грузится заново.
    --- Добавлено ---
    Ну и каждая строчка данных должна иметь фиксированное время, когда оно туда добавилось
    --- Добавлено ---
    Чтобы клиент понимал что ему грузить а что нет.
     
    AlexProg нравится это.
  11. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Омг.
    Есть какой-то пример на просторах интернета!? Пока не до конца понимаю.
     
  12. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вообще если бы делал чатик, у меня б была такая логика.
    1. Есть админ чата который имеет право создавать комнаты
    Код (Text):
    1. CREATE TABLE `chat_rooms` (
    2.   `id_room` int(11) NOT NULL,
    3.   `room_name` varchar(200) NOT NULL
    4. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    5.  
    6. INSERT INTO `chat_rooms`(`room_name`) VALUES ('room_1')
    2. Пользователь зайдя в чат должен внести какой то распознаватель, имя. И программа должна проверится есть ли такой уже в базе
    Код (Text):
    1. CREATE TABLE `chat_user` (
    2.   `id_user` int(11) NOT NULL,
    3.   `chat_user` varchar(200) NOT NULL
    4. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    3. Если пользователь что то пишет в комнату то в базу пишется кто написал, во сколько написал, в какой комнате он это писал
    Код (Text):
    1. CREATE TABLE `chat` (
    2.   `id` int(11) NOT NULL,
    3.   `user_id` int(11) NOT NULL,
    4.   `room_id` int(11) NOT NULL,
    5.   `message` varchar(1000) NOT NULL,
    6.   `date` date NOT NULL
    7. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    И уже по структуре этой таблицы можно легко отсеивать сообщения, банить не угодных и тп..)
    --- Добавлено ---
    И раз уж у вас чатик на ajax а бы хранил данные в таблице chat последние 24 часа от текущей даты, чтобы не было слишком много данных.
     
    AlexProg нравится это.
  13. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    У меня +- такая же.
    Как же различить старые и новые данные? Что бы каждые 3 секунды картинка не грузилась?
     
  14. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    sql запростом, если у вас есть колонка `date`
     
  15. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Есть.
    Смысл?
    Там дата, а скрипт каждые 3 сенды грузит новые данные. Еще и в БД писать UPDATE даты?
     
  16. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Зачем update у вас человек каждые три секунды долбится на сервер, сервер знает когда это происходит.
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Посылаешь на сервер id и дату последнего (первого, смотря в каком порядке у тебя выводятся) сообщения в чате, и выводишь только те, которые по дате >= последней и с другим id
     
  18. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Парни, не понимаю ваш ход мыслей :(
    Придумал по date-id проверять есть ли такое сообщение на странице или нет.
    Есть - НЕ обновляем его.
    Нет - обновим/добавим.
     
  19. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Да блин Когда ты обращаешься к свой таблице, сервер знает когда это происходит:
    PHP:
    1. SELECT NOW()
    Но если человек уже получал данные, То есть он загрузил свою страницу. Ему сразу php грузит всю информацию. Далее обновление происходит по средством ajax. И ты там можешь регулировать, что ему грузить а что нет
     
    AlexProg нравится это.
  20. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Вот об этом и вопрос.
    Как узнать что грузить? )
     
  21. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    1. Человек открыл страницу:
    Код (Text):
    1. SELECT * FROM `chat`
    2. WHERE room_id = 1
    2.Человек обновляет чат (посылает сообщение) или программа обновляет ему чат, по средством ajax
    Код (Text):
    1. SELECT * FROM `chat`
    2. WHERE room_id = 1
    3. AND  date >= NOW() - INTERVAL 3 SECOND
    она вычитает текущей даты три секунды. Все, у него свежие данные.
    Хотя я бы не рекомендовал обновлять так часто, лучше раз в минуту
     
    twim32 и qdevelopment нравится это.
  22. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    это "пустой" комментарий к теме, что бы добавить решение себе в заметки.
    Админам на заметку, была бы полезна кнопка "добавить сообщение/тему в закладки". Нашел только отслеживание, но это лишнее, мне бы в закладки, что бы посмотреть при надобности )))
     
    AlexProg нравится это.