2016-06-14 71 views
0

在文章http://www.cometdaily.com/2008/05/15/the-many-shades-of-bayeuxcometd-2/index.html笔者介绍:的cometd服务与广播信道

常与PubSub的,开发商觉得有必要,以提供私人信息到客户端为每个用户创建一个通道。例如,如果交易系统想要通知用户完成交易,则诱惑是创建像/ trades/a_user_id这样的频道,并且每个用户将订阅他们自己的频道。这种方法很有效,但并不是解决这个问题的最合理的方式,并且需要安全代码来防止未经授权的客户订阅其他用户的频道。

为特定用户实现消息的服务和广播频道之间的权衡是什么?我理解权衡的安全性方面,但资源开销又如何?我不明白为什么会有更多的资源用于广播频道,而不是定制路由服务。如果你能解释为什么一个人在用例上比另一个更好,而不是一个明智或不明智的陈述,那可能会帮助我做出决定。

回答

1

这篇文章很老了,它指的是CometD 1,而我们现在在CometD 3。 您可能想要检查CometD website的更新并阅读CometD 3 documentation

后面广播VS服务信道的概念是仍然有效的cometd 3.

用于创建的每个信道,作为它的广播或业务信道的服务器分配的数据结构。

在这篇文章的例子中,对比创建N个广播频道 - 每个user_id一个,而不是创建一个服务频道。前者的解决方案显然是在服务器上使用比后者更多的资源,并且可能会偷看(客户端可能会猜到user_id并订阅该频道,从而接收发往其他用户的消息)。

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

+0

感谢您的快速回复!我了解偷偷摸摸的漏洞,让我们暂时忽略这一点。如果我们在服务通道中创建与广播通道相同的路由行为,跟踪订户的用户标识,那么它是不是消耗了相同数量的资源,还是只有内存需要考虑? 从查看代码看来,像扫描和初始化这样的通道似乎存在一些开销。当有很多通道时,这会对服务器的性能产生很大的影响吗? – Chap

+1

您可以为每个'user_id'使用一个服务频道,但这不是必需的。话虽如此,CometD已经过测试可以扩展到数以万计的渠道,但是如果没有必要,您仍然要注意不浪费资源。 CometD API允许您高效地将消息发送到单个客户端,因此写这种应用程序非常容易。 – sbordet