0

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

通常使用 PubSub,开发人员觉得需要为每个用户创建一个频道,以便将私人消息传递给客户端。例如,如果交易系统想要通知用户完成的交易,很可能会创建一个类似 /trades/a_user_id 的频道,每个用户都将订阅他们自己的频道。这种方法有效,但不是解决此问题的最节省资源的方法,并且需要安全代码来防止未经授权的客户端订阅其他用户频道。

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

4

1 回答 1

1

这篇文章很老了,它指的是 CometD 1,而我们现在在 CometD 3。您可能需要查看CometD 网站上的更新并阅读CometD 3 文档

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

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

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

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

于 2016-06-14T08:48:08.453 回答