Re: [hybi] Subscription/topic confusion

Константин Буркалев <> Sun, 25 October 2015 09:02 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 1E5191B2C83 for <>; Sun, 25 Oct 2015 02:02:32 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: 2.001
X-Spam-Level: **
X-Spam-Status: No, score=2.001 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, HTML_MESSAGE=0.001, MIME_8BIT_HEADER=0.3, SPF_PASS=-0.001] autolearn=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id E0iZsEDUJnD1 for <>; Sun, 25 Oct 2015 02:02:29 -0700 (PDT)
Received: from ( [IPv6:2a00:1450:4010:c07::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 1B7251B2C7B for <>; Sun, 25 Oct 2015 02:02:29 -0700 (PDT)
Received: by lfbn126 with SMTP id n126so85370186lfb.2 for <>; Sun, 25 Oct 2015 02:02:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=dP/yIodc0ak+RKXtI/J9zzLrUNhr5BJ8djBmMeTH/DQ=; b=pY03CGtgBJVLWVR8tBoOQb3FbtdNCOpe6eOlHX8hSlC20VHmnt0adSmHASOijNZd7G bVR8AHylWIX7ziGub7UWgE9Ccp1IT5WkHVCm8+ylCYxIajWYWiEo8mjP+c11ECrDO+dd uMWwv/31X9G9tb0jhOdJfISS9iPe7kxOXIMENyKU5iqHBZ2TFh2fyVY6dkGrdHScT62i gTeglSvuTunDTOYNdyUdYlr0Saw3iPbSx0NO6w2T2DtRUbw+8DpZL32qOP/dGN9OWv3i Gmd1FQQWSdeL3rxMXEEqw6E/iFfe6rpxAgiUEvurff/KJMK5yWG5byr/7DukrA32Gy4J 32pQ==
X-Received: by with SMTP id jj4mr14774899lbc.122.1445763747306; Sun, 25 Oct 2015 02:02:27 -0700 (PDT)
Received: from [] ( []) by with ESMTPSA id a188sm5003671lfa.9.2015. (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 25 Oct 2015 02:02:25 -0700 (PDT)
Content-Type: multipart/alternative; boundary="Apple-Mail=_190E24AA-6E76-4BC7-A518-4BF058A46458"
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: =?utf-8?B?0JrQvtC90YHRgtCw0L3RgtC40L0g0JHRg9GA0LrQsNC70LXQsg==?= <>
In-Reply-To: <>
Date: Sun, 25 Oct 2015 12:02:25 +0300
Message-Id: <>
References: <> <> <>
To: Michal Fojtak <>
X-Mailer: Apple Mail (2.2104)
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: Sun, 25 Oct 2015 09:02:32 -0000

Hi, Michal!

> 23 окт. 2015 г., в 18:02, Michal Fojtak <> написал(а):
> Hi Konstantin,
> Thank you for your post.
> Let's use your chat server analogy. Let's say that I want to create a chat room. Such a chat room has to be registered somewhere. If it is not then nobody knows about it and nobody can publish/subscribe. How can I subscribe to something that doesn't exist. And it starts to exist only if somebody subscribes to it first. That's a deadlock.

Well, let’s see: if you just register a topic, but do not subscribe to it — it means nothing :) So, roughly, we can assume that subscribing to topic for a first time is also a kind of registering it at router.

Next question is — how a client can get a list of all topics, that exists on router — for that there is META API.

> My chat server should expose all topics that people can discuss. Regardless if someone has subscribed to it or not.

Mmm, yes, you a talking about a kind of sticky topics, that exist even without subscribers. For chat app that is a real case. But WAMP is more of general purpose pub/sub system^ and right now doesn’t have a such kind of functionality. I don’t know is it really needed. Lets see what other participants think of it.
My opinion is that registering a topic is unnecessary, cause subscribing to it is enough.

> Another real world example - I am developing a Qt-based WAMP client library. I am registering Qt objects. I can register objects, methods and properties. So far it is lovely. But those objects have signals. Or events if you wish. Those are topics in WAMP world. But they exist even if nobody has connected a handler to them. Once I register my objects with WAMP, they become remote objects. I can call methods, read and write properties. But what I need is to be able to query topics(signals) that those objects expose.

I don’t know does it make sense to publish events to topics, that no one is interested in? We have an option for persisting events (some kind of events history) in advanced profile, and may be in that context it can be useful. 

> I hope that the two examples describe my concern that topics exist without subscribers. Like procedures exist without callers.
> Cheers.
> Michal
> On Fri, Oct 23, 2015 at 11:44 AM, Константин Буркалев < <>> wrote:
> Hi Michal!
>> 20 окт. 2015 г., в 18:43, Michal Fojtak < <>> написал(а):
>> WAMP protocol defines two main mechanisms - RPC via registrations and calls, event distribution via subscribe/publish.
>> Callee can register procedure and such a procedure becomes an object which is tracked internally by router. Router "is aware" of registrations. Caller can query registrations via meta API.
>> This is not a story of other wamp entity - the topic. Topic as such is not stored anyware in the router. Router is not aware of them. Potential subscriber cannot query available topics. Ironically, you can query subscriptions. But unless somebody subscribes to it, the topic object exists only in publisher. 
>> It kind of contradicts the main advantage of having a central hub - router which is aware of all objects - procedures and topics.
> Well, yep, there may be some confusion about topics. But let’s look at that from different side:
> For example, in chat servers or irc, clients create topics as they needed, and you can not know which topics will be created in the future. Also, topics (rooms, channels) are created by users only when they first time need them. I don’t know cases, when user is aware of topics, that he will need in future. 
> From this point, WAMP proto is describing common user pattern of work. 
> Also, you can query info about topics in runtime via META API. Of course, there are a lot of gaps in specification about META API, but that is just another part we are working on.
> In Pub/Sub pattern there is loose coupling between clients and topics, and there is no need for publisher to be aware of how much subscribers are there, or does this topic exist, i mean from technology point of view, but from business side, of course can be such requirements. 
> But in RPC pattern it is necessary condition, because you can not just call some RPC, which doesn’t exist yet. And Callee provides RPC via it’s registration in router.
> From my point of view, adding topic registration — is just one more, mostly unneeded step. And even if we add it, i, as WAMP implementor, will transparently send a register message to wamp router at first time topic is requested. 
> As i mentioned earlier, we should extend and describe META API for how to retrieve topics list, info and so on.
>> Would it be possible to "register" topics like we can register procedures?
>> We can then get a list of topics. We can define and describe them. And other useful things.
>> P.S.: The subscription id is quite confusing as well. It is not really subscription identification. Router creates this id when a first subscriber subscribes to the topic. If there was a topic then we would have topic id and many subscriber ids for each individual subscriber which models the situation more naturally.
>> _______________________________________________
>> hybi mailing list
>> <>
>> <>
> С уважением,
> Константин Буркалев
> <>
> _______________________________________________
> hybi mailing list