I spent some time looking for frameworks that make making a real-time, collaborative web application (like Dabbleboard or Etherpad) easier. From what I could find, there are various frameworks that handle the real-time part, but not the collaboration part (XMPP/Bosh/Sophe.js, various Comet solutions like Tornado, APE, Node.js, Orbited, APE, and WebSockets (which may or may not also be a Comet solution depending on your view)). Then there is Google Wave which seems like it does most of what I want (handles operational transformations for me), but is currently restricted to other wave (or wave sandbox, if you use an embedded wave) users. Then there is mobwrite, which does synchronization for me using differential synchronization, but as far as I can tell, this won't apply to apps that use structured data (my data is in JSON). I'm leaning towards building a custom solution on top of WebSockets that tries to deal with real-time edits from different clients, but before I go at it, does anyone know of any other frameworks out there that would help me build such an app?
We provide an Operational Transformation Engine at www.beweevee.com that works in web applications through either a Silverlight/Javascript bridge or natively. As an example, a client of ours has integrated their javascript text editing control using Silverlight only for OT transformation purposes as their backend was entirely coded in Java.<p>You can get more info at www.beweevee.com
I was in a similar situation last spring and really didn't find anything that worked. But that was pre-Google Wave. Today, I believe the open-sourced wave reference server (<a href="http://code.google.com/p/wave-protocol/" rel="nofollow">http://code.google.com/p/wave-protocol/</a>) includes op trans. It's under Apache 2.0 and I doubt it'd take you long to rip out and wrap op trans into something useful for you.<p>FYI, after failing to find anything last year, I ended up implementing an operational transformation framework from scratch (using standard comet for comm). The literature's good enough that you can make sense of it all. Solo, it took me 2 weeks to implement the algorithm, another 2 weeks to put a callback framework around it to make it useful (like a SAX parser for changes to a shared xml structured document) and one more week to port it to js (original in Java) and add networking. Was a ton of fun and even useful for a couple of projects (shared canvas, text editor, collaborative UML'ing).
One you have a prototype push link up and running; server and client able to reach each other on demand, the rest is just a simple matter of user authentication, managing timestamps, and maintaining consistency between the server side data-structure modeling the shared "object" being collaberated on, and the disparate views the users have of it in their clients.<p>This stuff can't be trivially made into a framework, because "collaboration" is not a particular problem, but a whole class of same-same but different problems (as Thais would say.)
On the adobe side (i know) you have <a href="http://labs.adobe.com/technologies/afcs/" rel="nofollow">http://labs.adobe.com/technologies/afcs/</a> AFCS which answer this set of problem quite well.<p>As mahmud said "rest is just a simple matter of user authentication, managing timestamps, and maintaining consistency between the server side data-structure modeling the shared "object" being collaberated on,"<p>Which is imho not so easy.
Lunascript(<a href="http://www.asana.com/luna" rel="nofollow">http://www.asana.com/luna</a>) looks pretty exciting but I don't think it has been released yet.
I used APE and a heavily modified tiddlywiki to put together BlipWiki at <a href="http://www.baggr.com" rel="nofollow">http://www.baggr.com</a> and used the python/javascript diff-match-patch libraries from <a href="http://code.google.com/p/google-diff-match-patch/" rel="nofollow">http://code.google.com/p/google-diff-match-patch/</a> to keep the data in sync