[Opensim-dev] The HyperGrid
Cristina Videira Lopes
lopes at ics.uci.edu
Sun Oct 26 16:16:29 UTC 2008
I started working on an extension to OpenSim that makes it work in
peer-to-peer mode, i.e. no need for grid servers to help the process of
teleporting and more, which I explain below. I'm really excited to say
that this is working! -- I hope some of you are interested in trying it
out, and helping out too!
The project is called the HyperGrid. Hypergrid is an existing
theoretical concept in p2p networks which maps reasonably well to what
I'm doing here, so I borrowed the name.
Comments, suggestions, contributions, ... welcome!
Crista / Diva
** OpenSim HyperGrid**
The basic idea of p2p is that nodes define networks by linking to other
nodes. Unfortunately, this concept doesn't map too well to the concept
of a 2-dimensional map of "the world" (i.e. "the grid"). What does
position (Xloc, YLoc) mean in p2p where there is no central authority?
The 2-dimensional map is quite interesting in VWs, so we should continue
to use it. Should someone coordinate the allocation of sims to grid
Enters hypergrid. In an hypergrid of p2p nodes there is no central
authority for allocating nodes to grid positions. The position of peers
in the map is determined locally by the node itself, and not by any
global entity. As we move from peer to peer, we are presented completely
different grids. For example, my node can connect to CNN's world placing
it in position 10, 10 of my grid; but when I TP to CNN, I am presented
with a totally different grid: the node that I TP-ed to is probably not
at position 10, 10 of its local grid; my own node is probably not in
CNN's grid at all.
These links are the VW-equivalent of web hyperlinks. Some comparisons to
- Just like hypertext links, hyperworld links are uni-directional.
- The establishment of hyperworld links by region administrators is
[sort of] equivalent to writing a web page with hypertext links to other
- A web page with external links can be thought of as a 1D Map. The VW
Map happens to be 2D.
I've implemented a console command that looks like this:
link-region 10 10 ucigrid02.nacs.uci.edu 9000
10, 10 is the position on the local grid
ucigrid02.nacs.uci.edu and 9000 are the host and port respectively of
the remote opensim
Once this link is established, we can interact with this peer in the
normal way. It will show up in the local map at position 10, 10. We can
TP to it via the map. (I'm still debating whether adjacencies should be
allowed or not; they bring along child agents that can overload the
remote regions; but that's a detail)
I have this working already, and that leads to a whole other topic: the
topic of maintaining identity and accessing inventory. This second part
is not done yet, so once you TP out you loose access to your inventory.
If the viewer would cooperate, this would be infinitely easier, but
since we're assuming the LL viewer for the foreseeable future, this
needs a bit of server-side trickery.
*** Trying it out ***
Please get the sources from svn and follow the instructions in README.txt:
If things are not clear, don't hesitate in emailing me.
*** Implementation ***
The implementation of HyperGrid is a thin layer on top of the existing
protocols, Local and OGS1. The classes reuse the OpenSim framework
massively by inheritance, delegation and, when those fail, copy&paste.
The major crux of the idea is the management of region handles, which
need to be mapped between the local grid and the remote node's grid.
There are two sets of classes so that HyperGrid works both for
standalones and grid-ed opensims.
** Of interest to OpenSim architects: in order to instantiate these
classes, I had to subclass Region.Application.OpenSim and override a
bunch of things, especially the Startup methods which hard-code the
communication protocol class names. So if there's a way of modularizing
that better, it would be good.
** Of interest to Open Grid Protocol people: I didn't use any of your
code/concepts, for the following reasons:
a) It wasn't clear that what you are doing is an hypergrid model vs
simply supporting TPs between LL and opensim servers on the same grid.
b) OGP seems to be designed for talking to LL's servers. I wanted to do
something for opensim, because it's the only server code I have for
But I think that once the p2p protocols are clearly defined, we can
implement a different layer of messaging for LL servers using LLSD
instead of remoting. That is, assuming LL is vaguely interested in the
non-centralized, hypergrid model of VWs.
More information about the Opensim-dev