Connectors

From OpenSimulator

Revision as of 11:06, 4 July 2011 by Justincc (Talk | contribs)

Jump to: navigation, search

Overview

There are up to 5 components involved in connecting simulator code to a grid service. These are

Component Description
The simulator code itself This references the data service. This can be in OpenSim core or in a module.
The simulator data service connector These are found in OpenSim/Region/CoreModules/ServiceConnectorsOut/ (for outbound connections) and ServiceConnectorsIn/ (for inbound connections). These connectors come in two flavours, local and remote. The local connectors connect directly to the service and are used when caller and service are in the same process (as in the standalone configuration). The remote connectors use the service connectors in OpenSim/Services/Connectors to make a call over the network to some remote process.
The remote service connector These are found in OpenSim/Services/Connectors, as stated above. They actually marshal the data and make the appropriate call to a remote data service. These are not used for in-process connections.
The remote data service handler These are found in OpenSim/Server/Handlers/ These are not used for in-process connections. These unpack the call received from a simulator connector and pass it on to the service itself.
The service Each major service has its own package (e.g. OpenSim/Services/AssetService). The service actually services the call and returns data to the caller, if applicable.

Example

Let's take a look at the asset service. The asset service connector is available as the Scene.AssetService property in the Scene object (direct references aren't always available - sometimes the connector has to be requested via the Scene.RequestModuleInterface<Interface>() mechanism).

A caller executes the method Scene.AssetService.Get() to retrieve an asset synchronously.

Suppose first of all that we're running a standalone configuration where both simulator and service are in the same process. In this case, the simulator's call goes to the LocalAssetServiceConnector.Get(). This first checks the cache, and if the asset isn't found there, then calls AssetService.Get(). The AssetService retrieves the asset from persistent storage and passes it back to the simulator code.

Now let's suppose that we're running in a grid configuration, where the asset service is operating on some other machine. As before, the simulator code calls Scene.AssetService.Get(). This time, the call is routed to RemoteAssetServiceConnector.Get(), which in this case inherits from OpenSim/Services/Connectors/AssetServiceConnector.

AssetServiceConnector.Get() generates an HTTP call to http://yourassetserver/assets/assetId, where assetId is the id of the asset requested.

This hops over the network and is handled by OpenSim/Server/Handlers/Asset/AssetServerConnector. It uses its own AssetServerGetHandler to unpack the HTTP request and call the AssetService to retrieve the data. If the asset is found, then it returns the asset as XML ready for the receiving AssetServiceConnector to unpack. If the asset is missing then it returns a 404 HTTP status code.

Configuration

Personal tools
General
About This Wiki