How I built a Real-time Collaborative Editor with Web Sockets, Node.js & Redis
web2media.net
web2media.net
> You may think this is more or less similar to what Etherpad had - yes, it is!
Huh he says nothing about implementing operational transform so I can't imagine that this anything like Etherpad at all. > However, on some occasions these two actions needs to be executed concurrently
Some occasions? Using diffs? What about conflicts?Since Ruby supports fibers, it should actually be simpler to take the state across events firing, at least in theory, but since I'm everything but a node.js expert I would love to hear your opinion on the matter.
In contrast, most of the Node.js' libraries are written in a non-blocking manner. This may be because of the initial path the eco-system took. Also JavaScript, being naturally event-driven language encourages writing non-blocking code.
On the other side I fail seeing how Javascript is a more event driven language compared to Ruby. In the context it's often used (the web browser) it supports callbacks, but not with some special semantic. Just callbacks, anonymous functions.
For this point of view I think that languages with coroutines are probably more powerful as event-driven programming languages, because it's possible to save the state across calls in a much more high level way, leading to code resembling a lot erlang code for instance.
Thanks!
What a pity it doesn't support 64 bit yet, I'd definitely play around with this otherwise.
I think the messages from client to server always had to do an HTTP post, so we did incur the overhead of all the HTTP headers with each post from client to server, which happened at most twice per second.
You can view the client-side JS code for handling these 3 connection types here:
http://code.google.com/p/etherpad/source/browse/trunk/infras...
I didn't write this, but that's my understanding of how it works.
You can also get around the overhead of HTTP headers by using a Flash shim, but we never got that to work well through weird proxy configurations and misbehaving ISPs.