CometD 服务与广播频道

CometD service vs. broadcast channel

作者在文章http://www.cometdaily.com/2008/05/15/the-many-shades-of-bayeuxcometd-2/index.html中描述:

Often with PubSub, developers feel the need to create a channel per user in order to deliver private messages to a client. For example, if a trading system wants to notify a user of completed trades, the temptation is to create a channel like /trades/a_user_id and each user will subscribe to their own channel. This approach works, but is not the most resource sensible way of solving this issue and requires security code to prevent unauthorized clients subscribing to other users channels.

为特定用户实现消息的服务和广播频道之间的权衡是什么?我理解权衡的安全方面,但资源开销呢?我不明白为什么广播频道使用的资源会比自定义路由服务多。如果您能解释为什么在用例中一个比另一个更好,而不是一概而论地说明是否明智,这可能有助于我做出决定。

这篇文章很老了,它指的是 CometD 1,而我们现在是 CometD 3。 您可能需要查看 CometD website and read the CometD 3 documentation.

上的更新

广播与服务频道背后的概念对 CometD 3 仍然有效。

服务器为创建的每个频道分配数据结构,无论是广播频道还是服务频道。

在那篇文章的示例中,比较了创建 N 个广播频道(每个 user_id 一个)与仅创建一个服务频道。前者的解决方案显然比后者在服务器上使用更多的资源,并且它容易被偷看(客户端可以猜测 user_id 并订阅该频道,从而接收发往其他用户的消息)。

对于这种特殊情况,应用程序需要做的就是将消息传递给特定的客户端。对于这个用例,最好使用服务通道,因为它使用的资源更少(相同的服务器端通道可以用于所有用户,没有用户收到不是发往 him/her 的消息的风险)和它更安全。