1 Sessions filtering and management port {#Sessions}
     6 Before this document, only publishers were discoverable via ZeroConf, and the
     7 announced information was weak for filtering for supported events and any other
     8 semantics. Also, subscribers always subscribed automatically to every discovered
     9 publisher which used the same schema.
    11 To overcome already applied workarounds and missing features for filtering,
    12 application-compatible subscriptions and user-controllable subscriptions, this
    13 document describes necessary changes to ZeroEQ.
    15 Use-cases are coupling of applications that belong to a certain user/session,
    16 not coupling all applications on the same network. User-interfaces for selection
    17 of applications that should connect to each other need more information for the
    18 user and for the system to perform filtering.
    22 * Introduction of Session: only publishers of the same session and compatible
    23   events are automatically subscribed in the subscriber. The default session
    24   name is the current username. It can be set to a different value at runtime
    25   with the ZEROEQ_SESSION environment variable. If the session name is
    26   empty/non-existant, no filtering is performed and automatic subscription to
    27   all discovered publishers happens.
    28 * Schemas in URIs are superseded by the session; user-specified schemas are
    29   ignored. Filtering is now done via sessions and compatible events. As a future
    30   use-case, the schema might control the transport for zmq (tcp, inproc, ...)
    31 * The ZeroConf record contains information about published/subscribed events,
    32   application name (derived automatically), username and session.
    33 * Vocabulary stores event type information from an associated publisher or
    34   subscriber. The vocabulary information can be requested (this class implements
    35   request-reply using the REQ-REP socket from zmq). One vocabulary is associated
    36   with exactly one publisher or with one subscriber.
    37 * Broker can handle explicit (un)subscriptions instructed by a remote
    40 # Changes for Publisher
    42 * ZeroConf/Servus service name is _zeroeq_pub._tcp
    43 * Schema is fixed, internal and ignored if specified
    44 * URI can contain hostname and port
    45 * ZeroConf announcement:
    46   * Instance name is hostname:port
    48     * vocabulary_request = zmq connection string
    49     * vocabulary = semi-colon separated list of published event UUIDs
    50     * session = <user-name> by default, env ZEROEQ_SESSION if specified
    52     * application = <application-name>
    53 * Published events must be registered in the publisher. Non-registered events
    54   cannot be published. (TBD: Published events are auto-registered).
    55 * Add (un)registerEvent()
    57 # Changes for Subscriber
    59 * ZeroConf/Servus service name is _zeroeq_sub._tcp
    60 * Schema is fixed, internal and ignored if specified
    61 * URI can contain hostname and port
    62 * Automatic subscription only via session (default session is username),
    63   otherwise explicit subscription via Broker.
    64 * ZeroConf announcement:
    65   * Instance name is a UUID to uniquely identify this subscriber
    67     * vocabulary_request = zmq connection string
    68     * vocabulary = semi-colon separated list of published event UUIDs
    69     * session = <user-name> by default, env ZEROEQ_SESSION if specified
    71     * application = <application-name>
    72 * Event registration for vocabulary happens in
    73   registerHandler/subscribe
    75 # Changes for Broker/Management port
    77 * Supports subscribe/unsubscribe requests for any remote application
    78   * Tell application to subscribe to an event of a publisher
    79 * List of current subscriptions (for NodeGraph UI for instance)
    81 # New class Vocabulary
    83 * Provides a request-reply for vocabulary information
    84 * Holds registered events from a publisher or subscriber