Search code examples
ruby-on-railsrubypollinghttp-head

Rails: periodically use HEAD to check for page changes


I have a Rails app implementing a game, so it's expected that a player will leave 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?


Solution

  • 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.