I want to do something very similar to Google Doc's live updating - where all users can "immediately" see the actions of the other users in the doc.
To achieve this, my ideas so far:
- Continuous AJAX requests being done in the background (this would seem performance-intensive)?
- Surely there's not a way for the server to push notifications to all its clients and update them accordingly?
- AJAX requests every X seconds with a buffer/time-lapse of actions to be accomplished in those X seconds (simulating a real-time effect)?
I would like to know others experience in trying to achieve this effect. What is the best way to do this?
All help is appreciated.
NOTE: I'm not specifically looking for a real-time document editing solution. I'm looking for a solution to the same concept of what Google does with their Docs. I will actually be using that solution in a slightly different manner.
Also take a look at pubsubhubbub - http://code.google.com/p/pubsubhubbub/ Watch the video for a short intro.
Another alternative is Orbited:
One way to limit the # of ajax requests is to get clever with spacing them out. You don't need to make a request every second. When you get a response with activity, then do another request in 1 second. If no activity, then 2 seconds, then 4, etc, with maximum of maybe 30 seconds in between requests. When updates happen, reset the timer. Basically, space your requests in a smart way to make the GUI look as responsive as possible.
I vote for Long-poll strategy : each client opens a request to the server, but the server never breaks up connections, and just send pieces of java-script from time to time.
Constant AJAX requests would kill your server.
You could also have a look at ShareJS a Operational Transform libary and Derby which is a framework built on sharejs. They both have node.js backends - sharejs was written by a Google Wave engineer.