ZeroEQ  0.9.0
ZeroEQ - Zero Event Queue
Sessions.md
1 Sessions filtering and management port {#Sessions}
2 ============
3 
4 # Motivation
5 
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.
10 
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.
14 
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.
19 
20 # Overview of changes
21 
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_PUB_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
38  application.
39 
40 # Changes for Publisher
41 
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
47  * txt record:
48  * vocabulary_request = zmq connection string
49  * vocabulary = semi-colon separated list of published event UUIDs
50  * session = <user-name> by default, env ZEROEQ_PUB_SESSION if specified
51  * user = <user-name>
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()
56 
57 # Changes for Subscriber
58 
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
66  * txt record:
67  * vocabulary_request = zmq connection string
68  * vocabulary = semi-colon separated list of published event UUIDs
69  * session = <user-name> by default, env ZEROEQ_PUB_SESSION if specified
70  * user = <user-name>
71  * application = <application-name>
72 * Event registration for vocabulary happens in
73  registerHandler/subscribe
74 
75 # Changes for Broker/Management port
76 
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)
80 
81 # New class Vocabulary
82 
83 * Provides a request-reply for vocabulary information
84 * Holds registered events from a publisher or subscriber