Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
12 / 7 / 0
Регистрация: 08.02.2020
Сообщений: 33

Динамическое обновление контента у всех пользователей

28.05.2021, 13:42. Показов 5132. Ответов 11

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

Нахожусь в полном ступоре, поскольку (опять же, судя по множеству обсуждений в сети) самого очевидного способа решения не существует в природе. Имеется в виду следующее:

1. Пользователь отправляет сообщение нажатием на кнопку.
2. Сообщение обрабатывается и добавляется в базу данных.
3. Идет команда на обновление контента у всех пользователей.

Везде пишут, что подобным образом реализовать обновление контента невозможно. Меня это совершенно не удивляет (хоть и хотелось бы надеяться, что когда-нибудь подобная функция будет реализована), но, может быть, есть какая-то "отмычка", при помощи которой, хотя бы через тридевятое царство, это можно провернуть?

Если отбросить попытку обновить контент у всех пользователей при нажатии на кнопку, то для начала проверить, есть ли новое сообщение в базе данных, легко можно при помощи пхп. Например, так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*---забираем из базы максимальный ай ди сообщения---*/
 $info_max = mysqli_query($podklyuchenie, "SELECT MAX(id) AS 'id' FROM chat_mess"); 
 $row_info_max = mysqli_fetch_array($info_max, MYSQLI_ASSOC);   
 
 $max_id = "$row_info_max[id]";
 
 if ($_SESSION[messnew] != "$max_id") /*---если содержимое сессионной переменной и содержимое из базы не совпадают---*/
 {
  /*--выполняем обновление страницы---*/  
  здесь должна быть функция обновление контента у всех пользователей
 
 /*--обновляем сессионную переменную--*/    
  $_SESSION[messnew] = "$max_id";    
 }
Но что делать дальше?(( Дорогие форумчане, спасите-помогите, иначе у меня голова лопнет! Может быть, на самом деле ничего страшного в ежесекундном фоновом запросе нет?( Существуют же очень объемные чаты с большим количеством сообщений и пользователей, и ничего, сервера не взрываются. Тогда можно было бы сделать так:

1. Скрипт в фоновом режиме отправляет вышеописанный запрос каждую секунду.
2. В случае несовпадения данных, обновляется окно с контентом.

В этом случае тоже была бы очень благодарна, если можно, получить полную реализацию. Заранее огромное спасибо.

Добавлено через 32 минуты
Нашла вот такой скрипт:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        function show()
        {
            $.ajax({
                url: "okno.php",
                cache: false,
                success: function(html){
                    $("#okno").html(html);
                }
            });
        }
    
        $(document).ready(function(){
            show();
            setInterval('show()',1000);
        });
Он полностью рабочий, но просто каждую секунду обновляет окно. Как привязать обновление к условию выше, если первый вариант реализации все же никак не осуществить?

Добавлено через 16 минут
Очень неудобно, что нельзя исправлять свои же сообщения.
Вторая часть вопроса снята, сделала всё сама. Если вдруг есть возможность сделать первую реализацию, буду благодарна. Если нет, тему можно закрывать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2021, 13:42
Ответы с готовыми решениями:

Динамическое обновление контента
Был подключаемый блок с помощью include. Меня в нем не устраивало то, что если нужно посмотреть что добавилось, надо вручную обновлять...

AJAX Динамическое обновление контента
доброго времени суток есть такой вот скрипт <script type="text/javascript" src="jquery.js"></script> <div...

Динамическое обновление контента на простом примере
Друзья, помогите пожалуйста. Необходимо динамически показывать изменения на сайте. Изучаю javascript и добрался до ajax думал все смогу...

11
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
28.05.2021, 13:58
Могу предложить сделать на сервере, СТЕК и метод, который будет работать не по таймеру или циклу, а слушать события СТЕКА и делать рассылку по списку участников чата. В этом случаи нагрузка будет вообще не заметна.
0
12 / 7 / 0
Регистрация: 08.02.2020
Сообщений: 33
29.05.2021, 17:02  [ТС]
Чипс, это был бы очень хороший вариант, но для меня "СТЕК" - это равнозначно китайским иероглифам и, для того, чтобы в этом разобраться, понадобится потратить огромное количество времени, на что нет ни сил, ни, если честно, желания. Но всё равно большое спасибо за ответ)

Рано я порадовалась. Ничего у меня не работает, как надо, да и, честно говоря, я даже логики не понимаю. Вот не люблю я яваскрипт и все тут((

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 function show()
 {
  $.ajax(
  {
    url: "new_mess.php", //в это файле происходит пхп проверка на наличие новых сообщений и присваивается глобальная яваскрипт переменная 1 или 0. Если 1, новое сообщение есть, если 0 - нет. это работает исправно, проверила.
    cache: false,
    success: function(html)
    {   
      $("#okno").html(html);
         
      $.ajax(
      {
        url: "okno.php", //здесь лежит содержимое окна с сообщениями
      
        if (messnew == 1) //если есть новые сообщения, окно обновляется. и оно действительно обновляется.
        {
         success: function(html){ $("#okno").html(html); }
        }
    else 
    {
 //если новых сообщений нет, окно просто исчезает, поскольку оно все равно обновляется, но на пустое значение 
    }     
       });           
     }  
   });
 }  
  
 $(document).ready(function()
 {
  show();
        
  setInterval('show()', 1000);  
});
И теперь вопрос. Как объяснить скрипту, что в случае false ему не нужно обновлять окно, а просто оставить его, как есть, в исходном виде?

Добавлено через 21 минуту
Как же просто в пхп. Говоришь:
если месс = 1, апдейт данные.
если нет - ничего не делай.

Элементарно, блин. А тут белиберда какая-то(((
Если месс = 1, подгрузи страницу.
Если нет - подгрузи страницу.
И в чем разница? ((

Обзываться не надо, я сама знаю, что жёстко туплю))
0
01.06.2021, 11:38

Не по теме:

Цитата Сообщение от Loksly Посмотреть сообщение
но для меня "СТЕК" - это равнозначно китайским иероглифам и, для того, чтобы в этом разобраться, понадобится потратить огромное количество времени, на что нет ни сил, ни, если честно, желания.
Работу нужно делать как положено, а не как вам хочется, делайте качественно или ваше место займёт другой человек.

Добавлено через 2 минуты
P.S.
Если вы такое руководителю скажете, то можете попрощаться с премией :p

0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
01.06.2021, 11:58
Loksly, если вебсокеты не рассматриваете, то можно попробовать сделать по старинке. Но это довольно муторно. С каким-нибудь фреймворком на фронте, поддерживающим реактивность, было бы проще. Vue.js не рассматриваете? Мог бы рассказать, как на нём всё реализовать.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.06.2021, 12:02
Есть еще SSE, попробще WebSocket'ов.
https://learn.javascript.ru/server-sent-events
https://developer.mozilla.org/... ent_events
1
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
01.06.2021, 12:08
Para bellum, я так понимаю, на серваке Нода должна крутиться?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.06.2021, 12:12
Цитата Сообщение от Balanaar Посмотреть сообщение
на серваке Нода должна крутиться?
По второй ссылке пример на PHP есть тоже.
1
12 / 7 / 0
Регистрация: 08.02.2020
Сообщений: 33
01.06.2021, 12:16  [ТС]
В итоге я со всем справилась, всем большое спасибо) Рекомендации обязательно почитаю)

Чипс, я думаю, что человек, получающий деньги за свою работу и вынужденный из-за подобной фигни (а для профессионала это реально фигня) бегать на специализированные форумы, должен быть выгнан поганой метлой со своего рабочего места :Р
Именно поэтому я на этом не зарабатываю, а просто пытаюсь научиться выполнять интересные мне задачи. Чисто для себя и своего собственного развития)

П.С. Кстати, оказалось, что и в яваскрипт все можно сделать очень просто и интуитивно понятно :Р
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.06.2021, 12:18
Цитата Сообщение от Loksly Посмотреть сообщение
Чисто для себя и своего собственного развития
Цитата Сообщение от Loksly Посмотреть сообщение
чтобы в этом разобраться, понадобится потратить огромное количество времени, на что нет ни сил, ни, если честно, желания
Однако.
0
12 / 7 / 0
Регистрация: 08.02.2020
Сообщений: 33
01.06.2021, 12:28  [ТС]
Para bellum, в этом прелесть самостоятельного копания в материале) Есть интерес и желание - копаешься. Нет - не копаешься) Если что-то достаточно сложно, но может пригодиться еще в стотыщпятьсот вариантах работы - имеет смысл тратить на это время, но ради одного единственного каприза это просто нерационально)

В данный момент я понимаю, что такое СТЕК и для чего применяется, но влезать в технические дебри не вижу смысла, пока мне этого достаточно) Вполне возможно, что через пару дней мне стукнет в голову, что это копец, как важно, но сейчас есть и другие, более актуальные и интересные задачи) Тем более, что конкретно с этой я и так справилась)

В любом случае я очень благодарна за подсказки и ссылки на материал, поскольку никогда не знаешь, что и когда может пригодиться, а матчасть все-таки учить надо так или иначе
4
123 / 98 / 15
Регистрация: 02.02.2014
Сообщений: 346
01.06.2021, 14:40
Цитата Сообщение от Loksly Посмотреть сообщение
Чипс, я думаю, что человек, получающий деньги за свою работу и вынужденный из-за подобной фигни (а для профессионала это реально фигня) бегать на специализированные форумы, должен быть выгнан поганой метлой со своего рабочего места :Р
у нас работа такая. невозможно знать всё. не важно сколько тут у кого репутации. Всё равно, всего не знаем.
Веб постоянно развивается. кто то другие языки осваивает. постоянно читаем мануалы. А если уж вообще никак, то точно также идём спрашиваем совета, но уже на других рессурсах. правда обычно хватает только подсказки или ссылки на доку
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.06.2021, 14:40
Помогаю со студенческими работами здесь

Динамическое обновление контента данными из json
Интернет изобилует следующими примерами на тему AJAX и jQuery с использованием php: <html> <head> <meta...

Динамическое обновление контента аля Facebook, Vkontakte и прочее
Всем привет! Подскажите в каком направлении почитать / посмотреть. Задача реализовать обновление какого-либо контента примерно как...

Динамическое обновление контента по таймеру. Как передать значения параметров?
Добрый день, Нашел такой скрипт для динамического обновления контента без перезагрузки страницы. Скрипт отрабатывает правильно,...

Динамическое обновление контента
Добрый час, форумчане. Столкнулся с проблемой, помогите решить. Существуют две текстовые формы, они соединены между собой "стрим...

Динамическое красивое обновление контента
Собственно есть аякс запрос который каждые допустим 5 секунд обновляет контент. Все работает по тех части все нормально, но вопрос такой,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru