[Bugs & Requests][Wiki]

6.3. VOS Stack

Conceptually, VOS consists of three different layers:

Table 6-1. Conceptual protocol layers

Meta-object layer
Message layer
Transport layer

The meta-object layer is described in the official VOS manual and API specification. On this layer, a Vobject is represented by one or more C++ objects, one for each of its types. Method invocation on such objects is the primary means for an application to interact with a Vobject. The method implementations in turn may access the message layer for remote invocations, cache update notifications, and so on. The VOS core protocol provides messages related to basic Vobject linking and type management. Meta-types may define additional messages that a Vobject of this type may emit or consume. This is described in the corresponding Object Type Definition (OTD).

The message layer offers facilities for message based communication with other peers across the network. To communicate, a Vobject implementation constructs special C++ objects (of the type VOS::Message), and passes them to the messaging primitives. Also, a Vobject implementation may register callback methods for specific message types, in order to process reply messages etc. The messaging primitives are described in more detail below. They are responsible for serialising and parsing Message objects to/from byte sequences. The encoding is described in more detail below. The messaging primitives use the transport layer to transmit and receive such byte sequences over the network.

VOS primarily uses TCP/IP[TCP] as its underlying network transport protocol. Other transport mechanisms could be used too, most notably an intermediary SSL [SSL] layer, or UDP[UDP] datagram communication. Note that in this case, Vobject URLs will reflect this by starting with a different URL scheme. This document focuses on the TCP/IP transport protocol. Consequently, the VOS message layer uses the common socket API to send and receive messages.