Опресняване на страницата за всички онлайн потребители

Когато потребител щракне върху бутона за запазване, искам всички потребители в момента на страницата да бъдат уведомени или дори по-добре (или още по-лошо като се замисля) да принудя страницата да се опреснява.

И така, опитах това в моя скрипт:

function save_match() {
    ...
    alert("Saved slot " + slot + "! :)");
    window.location.reload();
}

но опресняването, разбира се, се случва само за потребителя, който действително е натиснал бутона, другите потребители нямат представа за записа, който другият потребител току-що е направил.

Принудителното презареждане на страницата изглежда малко вероятно да се случи, така че какво ще кажете да направите нещо чрез JavaScript, което да уведоми другите онлайн потребители за инцидента със запазване?

Възможен свързан въпрос.


И така, това, което искам, е следното:

function save_match() {
    ...
    alert("Saved slot " + slot + "! :)");
    // do something here so that all online users are updated!!
}

person gsamaras    schedule 13.01.2015    source източник
comment
Искам известието да се случи, когато се случи запазването, така че ще ми трябва нещо в края на save_match(). @PaulG   -  person gsamaras    schedule 14.01.2015
comment
Javascript не може да направи това сам. Трябва да създадете непрекъсната връзка между всички онлайн потребители към сървъра.   -  person kappaallday    schedule 14.01.2015
comment
Някакъв пример @hardcoresquirrel?   -  person gsamaras    schedule 14.01.2015
comment
ще обясня Можете да го направите с AJAX. Това save_match() ще създаде заявка с променлива refresh = true или нещо подобно. На сървъра ще зададе глобална променлива everyone_refresh = true, ако refresh = true е изпратено от клиент. След това, отделно от това, имаме друга AJAX заявка на всяка 1 секунда, която ще поиска от сървъра everyone_refresh променлива. Ако върне true, window.location.reload(). Доста просто. Всеки клиент ще знае кога да опресни. Разбира се, има още неща, които трябва да се вземат предвид, като избягване на припокриване и т.н.   -  person kappaallday    schedule 14.01.2015
comment
Зависи от платформата, но това е кучешкият начин, бърз, прост, но не толкова елегантен. Вече има websockets за създаване на непрекъсната връзка между клиент и сървър.   -  person kappaallday    schedule 14.01.2015
comment
@hardcoresquirrel можеш ли да дадеш хубав отговор с това, за да мога да го разбера, моля? :)   -  person gsamaras    schedule 14.01.2015
comment
няма какво повече да се каже, просто го приложете на практика, 2 ajax заявки и 2 реда код от страна на сървъра...   -  person kappaallday    schedule 14.01.2015
comment
Нека продължим тази дискусия в чата.   -  person gsamaras    schedule 14.01.2015


Отговори (1)


Трябва да внедрите Server Push. Тази технология има различни работни стратегии като Long pooling, Heartbeat и WebSockets. Провери ги.

Редактиране: Наистина е възможно с която и да е от споменатите стратегии.

За дълго обединяване изпращате заявка до сървъра и чакате безкрайно, докато сървърът „избута“ всички актуализации, ако има такива. Проверете тази публикация, за да видите как да го направя с jQuery.

Heartbeat е различна и по-консумираща newtork техника, при която изпращате заявка на всеки x секунди, за да видите дали има някакви актуализации от сървъра и ако има, актуализирате данните си. Вижте този пример как да го внедрите .

Можете също да видите пример за това как да внедрите javascript приложение WebSockets в MDN но помислете за поддръжката на браузъра за тази функция, преди да я използвате.

person Roberto Linares    schedule 13.01.2015
comment
Значи отговорът е не? Подобрете отговора си, защото сега изглежда като връзка само една. - person gsamaras; 14.01.2015
comment
Отговорът е да, но трябва да изберете най-добрата стратегия за вашите нужди. Редактирах отговора, за да покажа повече подробности за него. - person Roberto Linares; 14.01.2015