Re: [hybi] Subscription/topic confusion

Tobias Oberstein <> Sat, 31 October 2015 14:20 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 6526C1B3882 for <>; Sat, 31 Oct 2015 07:20:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id FJT249auV22f for <>; Sat, 31 Oct 2015 07:20:25 -0700 (PDT)
Received: from ( []) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 928061A1AA6 for <>; Sat, 31 Oct 2015 07:20:25 -0700 (PDT)
Received: from [] ( by ( with Microsoft SMTP Server (TLS) id 8.3.377.0; Sat, 31 Oct 2015 07:20:24 -0700
To: Michal Fojtak <>, "" <>
References: <> <> <> <> <>
From: Tobias Oberstein <>
Message-ID: <>
Date: Sat, 31 Oct 2015 15:20:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 7bit
Archived-At: <>
Subject: Re: [hybi] Subscription/topic confusion
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Server-Initiated HTTP <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sat, 31 Oct 2015 14:20:27 -0000

> There seems to be a fundamental misunderstanding of how we see this.
> Please, let me express it using one of your (I belive important) comments:
> Producer       Item            Consumers
> --------------------------------------------
> caller         call            callee
> publisher      event           subscriber
>  From the table above it suggests that a caller is a producer of a data.
> But it only produces a request for data - the call. We need to take a

Correct. The caller is a producer of calls, whereas the callee is a 
consumer of calls.

> look on who produces the data:
> Souldn't the table look like this?
> Producer       Item            Consumers
> --------------------------------------------
> callee         result           caller
> publisher      event           subscriber
> Publisher produces data consumed by subscriber.
> Callee produces data consumed by caller.

No, a callee is a producer of call _results_. And a caller is a consumer 
of call results.

But I guess this is more about "naming things" than anything: maybe it 
would be better to use the words "source" and "sink", instead of 
"producer" and "consumer"?

> We all agree that publishers and subscribers are loosely coupled and do
> not need to know about each other as I pointed out in my last post.
> Btw., the publisher should still have a chance to stop publish if there
> are no

"no" what (some text missing)? no subscribers? If so: this is nothing a 
publisher should be concerned about, because of the decoupling. It's the 
router that will recognize a publication on a topic with no subscribers, 
and simply do nothing ("throw away the event"). But maybe I didn't get 
your question?

> What I am mainly after is to understand procedure and topic meata api.

Yep, from what I understand about your use case / itch, it's the 
reflection parts of the WAMP meta API that would fit best for you.

> Maybe it is all just about semantics.
> Also, the specification is changing quite dynamically.

There are parts of the WAMP spec which are not yet hashed out: parts of 
the "advanced profile" (WAMP AP). And one such area is the WAMP meta 
API. And the reflection part of the former is merely at "sketch stage".

> Sometimes, the spec is misleading. E.g.:
>         13.3.12
>         <>.
>         Procedure Reflection also talks about topic reflection.
>         or
>         wamp.reflection.topic.list- where is the list coming from? How are topics persisted? Or
>         does it list only those previously defined? - Actually why not,
>         maybe that's where my "topic registration is"?
>           or
>         wamp.reflection.topic.describeand wamp.reflect.describe- what is the difference between the two?
>         wamp.reflect.define- how do I specify if I want to define procedure or topic? Or
>         should the information be stored in the definition itself?

I have added your comments here:

Touching on one aspect: "wamp.reflect.define" would define metadata 
about a topic/procedure/error URI, and the original idea was to have the 
submitted info contain also the URI type. E.g. submit a JSON schema 
thing to "wamp.reflect.define".

>         The meta api and reflection is a very important aspect of a good SOA gateway/router/hub.

Yes, agreed. It's an important area.

>         It is important for me because (as specs points out):
>           o  documentation
>             o  discoverability (what applications are registered, what functionalities they offer)
>             o  generating stubs and proxies (for Qt objects, generic UI for procedures and events)
>         I can see that you guys do first things first and the reflection and meta api is still a sketch.

Exactly. The degree of completeness/polish over the different features 
in the WAMP AP is varying. The approach is one of 
co-design/-implementation: immediately implement even working sketches, 
gain experience, and iterate to refine the spec.

>         I hope that this chat might help do refine this piece of protocol.

Yes, it does help. It's exactly this feedback and input from 
implementors and app developers we need .. thanks for chiming in!