PyGoWave

PyGoWave is a quick-and-dirty open source clone of the Google Wave Server, written mainly in Python and JavaScript.
Implementation
Create a Google Gadgets / Google Wave environment
Without access to the Google Wave Client PyGoWave is forced to build his own client too. This is a heavy task and will take a huge amount of time.
Gadgets are already running fine in testing environment. The next step is their integration in a real Wave.
Choose Python
Platform independence, clarity, nice design of the language, the ease and speed of writing working programs and much more are my reasons for choosing Python.
Choose Django (and MooTools)
With Django, a persistent object model can be created in a few hours. Because of the request-response scheme of the Robot API there shouldn’t be a problem to shove those events and context into a robot.
PyGoWave switched from jQuery to MooTools. Not only MooTools has everything that jQuery has, but it also provides a nice toolset for object oriented programming in JavaScript. The Gadget API wrapper is written in vanilla JavaScript so it won’t interfere with any toolkit a Gadget may choose.
Choose Orbited and RabbitMQ
The current Wave client doesn’t use any (short-)polling. Instead, a Comet frameworkis in place for which PyGoWave took Orbited. This reduces latency to about a quarter of a second which is sufficient for Waves.
Because every data traffic in a Wave is sent via messages, a message broker had to be installed. PyGoWave choose's RabbitMQ over ActiveMQ because the former is written in Erlang, a nice functional language with built-in parallelism.
The main node of data exchange between client and server is represented in an AMQP RPC server (with AMQP being the main messaging protocol of RabbitMQ). This RPC server acts as a controller in terms of the MVC design pattern. Because of the architecture of the message broker, this server can be easily split into multiple threads which can handle Wave messages in parallel.
What's with the Federation Protocol?
There is a module for connecting RabbitMQ and ejabberd, a Jabber server implementation. It may be possible to set something up that manages the Federation messages.
Client protocol specification
PyGoWave Server uses a non-standard protocol to communicate to its web client interface, just like Google Wave Server uses protobuf as the communication protocol for the officially released console client. PyGoWave Server roughly bases its protocol on the Wave Robot API.
 
< Prev   Next >