Ask HN: Frameworks for real-time collaboration in a web application?
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?
13 comments
[ 4.1 ms ] story [ 39.5 ms ] threadThis 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.)
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).
You can get more info at www.beweevee.com
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,"
Which is imho not so easy.