开发者

Rails: periodically use HEAD to check for page changes

开发者 https://www.devze.com 2022-12-27 08:26 出处:网络
I have a Rails app implementing a game, so it\'s expected that a player will leave 开发者_StackOverflow中文版a browser open at the game page. When player Alan takes an action himself, I use AJAX reque

I have a Rails app implementing a game, so it's expected that a player will leave 开发者_StackOverflow中文版a browser open at the game page. When player Alan takes an action himself, I use AJAX requests to update the game page Alan is viewing to reflect the new state. However, when another player (Bob) takes an action, I don't have (or want) a mechanism to push the change to Alan's view.

I would like Alan's page to periodically poll the Rails server to find if there have been any changes since last reload, and to reload the page (either via a whole-page GET or an AJAX call) if not. In order to play nicely with caches and proxies, I'd like to do this by issuing a periodic HTTP HEAD request, get Rails to work out the timestamp of the last change (trivially available from my DB) and respond with that in the Last-Modified header; then have the client-side act on that timestamp.

How can I go about doing this?


A lot of what you want is built-in to Rails.

Have a look at Conditional GETS in the Rails cache guide.

If you set this up right it all just happens between the browser and the server.

If you are very keen, you can put a reverse proxy in front of your Rails stack and have a whole extra layer of caching.


I don't have (or want) a mechanism to push the change to Alan's view.

Why don't you want realtime updates to the other players view?

You could achieve this with long polling AJAX requests like ajaxmessaging does (did?) or if Flash is your weapon of choice then Juggernaut could be an option. The nginx_http_push_module also looks really promising. It's fair to say that the whole deal is kind of a mess so let's hope for a surprisingly quick move to HTML5 and its WebSockets.

0

精彩评论

暂无评论...
验证码 换一张
取 消