Last updated at 4:46 pm UTC on 3 October 2005
AardWorks Gossip (AWG) is a peer-2-peer network implementation based on the following ideas:
- Gossiping around network information much like Gnutella. No central nodes are necessary;
- Everything runs over UDP, which makes passing NAT routers a breeze;
- Various routing models (direct routing, ant routing, broadcast);
- Various information finding models (push: presence, pull: flood search);
- It's an application network, not a file sharing network.
On the application level, you are presented with nodes and endpoints within nodes. You can send data to a node:endpoint combination, or tell the local node to invoke a certain handler when data arrives for the local node and a certain endpoint. Nodes are very much like TCP/IP hosts; endpoints are comparable to sockets.
Just like TCP/IP, there are 'well-known endpoints'. Endpoint numbers 0 to 16r0100 are reserved as well-known endpoints - peer list exchange, presence information exchange, etcetera are all handled through well-known endpoints. At the moment, there's no official registry of well-known endpoints; furthermore, services can be announced by name through presence which largely eliminates the use of well-known endpoints for applications on top of AWG. Like TCP/IP, a handler can be registered for a well-known endpoint or a dynamic endpoint. Handlers are simple code blocks that are called with two arguments: the data received and the node that sent the data. This extremely generic interface should give application designers a lot of flexibility (although it is likely that patterns will emerge that will be captured in additional AWG
The package currently sports two sample applications in the 'Tric-P2P' package on SqueakSource (DGV project):
However, the main application built with it is Kolibri
Nodes vs Peers
In these pages, I try to be careful with a distinction between my definitions of nodes and peers:
Technically, each node knows the id of each other node on the network (in principle, and implicitely). Each node knows the UDP host:port of each of its peers. Data can be exchanged only directly with peers; to reach nodes that are not peers, the data needs to be sent off to one or more peers and they have to attempt to route it on.
- a node is any node on the network.
- a peer, in the context of a node, is a member of the limited set of nodes that the node directly attempts to exchange information with.