Rails: периодически используйте HEAD для проверки изменений страницы - PullRequest
1 голос
/ 14 апреля 2010

У меня есть приложение Rails, реализующее игру, поэтому ожидается, что игрок оставит браузер открытым на странице игры. Когда игрок Алан сам выполняет действие, я использую запросы AJAX, чтобы обновить страницу игры, которую Алан просматривает, чтобы отразить новое состояние. Однако, когда другой игрок (Боб) предпринимает какое-либо действие, у меня нет (или я не хочу) механизма, чтобы подтолкнуть изменение к представлению Алана.

Я бы хотел, чтобы страница Алана периодически опрашивала сервер Rails, чтобы выяснить, были ли какие-либо изменения с момента последней перезагрузки, и перезагрузить страницу (с помощью GET или вызова AJAX на целую страницу), если нет. Чтобы хорошо играть с кешами и прокси-серверами, я хотел бы сделать это, выполняя периодический HTTP-запрос HEAD, заставляя Rails определять временную метку последнего изменения (тривиально доступную из моей БД) и отвечая таковой в Последнем - Модифицированный заголовок; затем сделайте так, чтобы клиентская сторона действовала на этой отметке времени.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Многое из того, что вы хотите, встроено в Rails.

Взгляните на Условные GETS в руководстве по кешу Rails.

Если вы все настроите правильно, все будет происходить между браузером и сервером.

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

0 голосов
/ 14 апреля 2010

У меня нет (или я не хочу) механизма, чтобы подтолкнуть изменение к представлению Алана.

Почему вы не хотите обновления в реальном времени для просмотра других игроков?

Этого можно добиться с помощью длинных опросов AJAX-запросов, таких как ajaxmessaging делает (сделал?) Или если Flash является вашим предпочтительным оружием, тогда Джаггернаут может вариант. nginx_http_push_module также выглядит действительно многообещающе. Справедливо сказать, что вся эта сделка - беспорядок, поэтому будем надеяться на удивительно быстрый переход к HTML5 и его WebSockets .

...