"... The first version of my code was pretty much brute force, every user was sending their X,Y position every time they moved their mouse. Yes, that's 'a lot' of data per second. There has been 50gb of data transfered in just 4 days :P ..."
I made one of these last week to play with nodejs and WebSockets.
My heavily-unoptimized wire protocol used uncompressed JSON objects sent at each mousemove event on the canvas while drawing, which means it's great fun on the LAN, but would choke any affordable Internet link.
It appears that this one solves the problem by limiting the rate at which you can draw—drag the mouse too fast, and it lifts the pencil.
That's not correct. The drag too fast tweak is there to discourage people scribbling all over the place.
The actual "fix" for your problem was to collect commands (mouseMoves) and send them every 75ms instead of sending a command every mouse move. There is also some simple delta stuff to save on BW
In my case, it's the throughput that was a problem; there was practically zero latency or cost of sending a message using node and WebSockets.
I was considering doing some sort of curve-fitting to (lossily) compress the drawing commands. Sending a couple points to describe a quadratic or Bézier curve is a lot nicer than hundreds of points to describe tiny line segments.
And, as luck would have it, <canvas> draws both natively! :)
Revenue model: You should make it so that after a certain number of people vote on its completeness, a print can be made and the board gets cleared for the next work of art.
I don't think many people will pay for a canvas full of penises (which is what it's been looking like both times I've looked at it, i.e. yesterday and today).
https://docs.google.com/drawings/edit?id=1ViOs4u4_uaPoDzwnd4...