| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Насколько я разузнал WebSocket держит двустороннюю связь между сервером и клиентом. Если так, то что мешает серверу сделать обновление когда он сочтёт нужным? |
| Автор: fedushok 8.2.2016, 18:57 |
| Вопрос не сколько в задаче, сколько в здравом смысле. Если я правильно http://caniuse.com/#feat=websockets, то только EI 8 и 9 не поддерживают WebSocket-ы. В опере нужно включать специально. Капец какой-то. |