Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Одностороннее обновление страницы браузера


Автор: fedushok 30.1.2016, 22:35
Приветствую всех!

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

Автор: ksnk 30.1.2016, 23:00
Периодически опрашивать сервер на предмет "а не поменялось ли чего". Ajax'ом. Сервер  должен выдавать, ну, к примеру, время последней модификации данных. Страница сравнивает это время со своим (вшитым страницу при ее генерации) и перезагружается, если надо.

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

Автор: fedushok 30.1.2016, 23:08
Опрашивать сервер "не катит". Это нарушение компетенции. Если только сервер знает о наличии обновления, тогда он и должен выполнять работу по обновлению. Нужно другое решение.

Автор: igorold 2.2.2016, 07:40
В клиент-серверной конфигурации, если клиент не сделает запрос, от сервера ничего не придет.
Разве есть другое решение кроме как предложения ksnk?

Если есть, было бы интересно.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Odnostoronneye-obnovleniye-stranitsy-brauzera-id56ad10a6ae20155f348b4567#findElement_E7045_56b03352ae2015b735f1b281_0

Автор: gta4kv 2.2.2016, 07:42
Вебсокет.

Цитата

Опрашивать сервер "не катит". Это нарушение компетенции. Если только сервер знает о наличии обновления, тогда он и должен выполнять работу по обновлению. Нужно другое решение.


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

В случае с сокетом с сервером будет установлен постоянный коннект и, соответственно, можно будет передать любые данные и на странице их поймать с помощью WebSocket.onmessage

В случае с опросом сервера так же возможен long polling это тоже по факту непрерывный коннект к серверу но на уровне HTTP. Суть заключается в том, что к серверу вешается подключение (обычно <30s), а сервер опрашивает себя сам на наличие изменений в цикле (из разряда while(true) { sleep(1) ...select new events... }), при получении данных или отваливание опроса по таймауту устанавливается новый "long poll" 

Автор: fedushok 7.2.2016, 21:51
Цитата(gta4kv @ 2.2.2016,  07:42)
Если где-то это утверждение и верно, то явно не в веб-программирование. Сервер с клиентом установить связь не может. Возможные варианты уже описали, это или периодический опрос сервера или вебсокет.

Насколько я разузнал WebSocket держит двустороннюю связь между сервером и клиентом. Если так, то что мешает серверу сделать обновление когда он сочтёт нужным?

Автор: ksnk 8.2.2016, 00:58
Цитата(fedushok @  7.2.2016,  21:51 Найти цитируемый пост)
Если так, то что мешает серверу сделать обновление когда он сочтёт нужным?

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

Автор: fedushok 8.2.2016, 18:57
Вопрос не сколько в задаче, сколько в здравом смысле.

Если я правильно http://caniuse.com/#feat=websockets, то только EI 8 и 9 не поддерживают WebSocket-ы. В опере нужно включать специально.
Капец какой-то.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)