Перезагрузка страницы у посетителя по инициативе сервера

Samail
На сайте с 10.05.2007
Offline
361
1116

Мне необходимо сделать возможность при необходимости перезагрузить страницу с определённым ID у всех посетителей у которых в данный момент она открыта. Конкретного времени когда нужно перегрузить нет, просто как мне это понадобится, может раз в день, а может в неделю. Как это сделать с наименьшей нагрузкой на сервер и компьютер пользователя?

Посетителей в онлайне в среднем человек 100-200.

Какая нагрузка будет я не представляю, если хоть сколько-то заметная или у посетителей будут неудобства, то обойдусь без перезагрузок.

MT
На сайте с 17.01.2017
Offline
22
#1

Используйте сокеты.

ДП
На сайте с 23.11.2009
Offline
203
#2

Насколько важно скорость перезагрузки - т.е. время между тем как вы решили, что надо перезагружать и рельной перезагрузкой у пользователя?

Навскидку вариант - при генерации в страницу добавляете js переменную со значением, например, 1.

По таймеру (здесь как раз надо поиграться в зависимости от того как быстро хотите перезагружать) запрашиваете сервер на предмет измения этого значения. Хоть аяксом, хоть динамически тег script добавляйте. Если значение на сервер отличается - перезагружаете.

Еще вариант - картинку динамически вставлять с определенным урлом (который задается при первоначальной генерации страницы). Т.е. например, http://site.ru/1.gif и обработчик onError ставите, когда надо перезагрузить - картинку убираете (ну скрипт вместо картинки, чтобы 404 выдал код) - скрипт видит, что картинка исчезла - перезагружает страницу.

Но суть - та же, по таймеру это делать.

Наверно, есть какая-то возможность на веб-сокетах что-то подобное сделать, но тут я подробностей не знаю.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#3

По таймеру ajax запрос на php файл, в котором будет id юзера.

Каждые 10 секунд проверять его. Если id совпадает с текущим обновить страницу. Никаких проблем не вижу.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Samail
На сайте с 10.05.2007
Offline
361
#4

ID страницы наверное имелось ввиду. Тут ещё нужно что-бы перегрузилась страница один раз только, после перезагрузки то скрипт опять полезет проверять не нужно ли страницу перегружать.

Нумеровать может перезагрузки эти. Каждый раз когда отправляешь запрос на перезагрузку, в БД для данной страницы номер перезагрузки увеличивается на 1 и в отдельной папке файл создаётся "id-страницы.txt" с этим-же числом, если число больше чем было указано при генерации страницы значит нужно перегрузить её.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5
Тут ещё нужно что-бы перегрузилась страница один раз только

Запоминается в куку. Если кука есть, не перезагружать. Кука ставиться только на конкретную страницу и удаляется после её закрытия.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#6

websockets или eventsource. nginx с модулем libnginx-mod-nchan облегчит эту задачу.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
ДП
На сайте с 23.11.2009
Offline
203
#7
Samail:
ID страницы наверное имелось ввиду. Тут ещё нужно что-бы перегрузилась страница один раз только, после перезагрузки то скрипт опять полезет проверять не нужно ли страницу перегружать.
Нумеровать может перезагрузки эти. Каждый раз когда отправляешь запрос на перезагрузку, в БД для данной страницы номер перезагрузки увеличивается на 1 и в отдельной папке файл создаётся "id-страницы.txt" с этим-же числом, если число больше чем было указано при генерации страницы значит нужно перегрузить её.

Ну вот я так и предлагаю.

Например, при генерации страницы в коде будет что-то типа

var version = 135;

т.е. записываться текущая ревизия.

Когда надо обновляться, то скрипт на сервере будет выдавать 136. Скрипт по страницы поймёт, что значение изменилось - перезагрузит страницу. А когда эта страница будет генерироваться - то в её теле var version = 136; уже будет.

Это общий принцип, ajax,сокеты или что-то еще будете использовать - роли не играет.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий