0

我正在开发一个允许用户相互发送内部消息的应用程序。

我会告诉你当前的设置是什么,请帮助我弄清楚如何使它工作,或者建议另一个角度。我们将 BlazeDS 与 Spring 一起使用。

  • 用户 A 监听消息主题 Chat.A 上的消息
  • 用户 B 监听消息主题 Chat.B 上的消息
  • 两个用户都在主题 Chat.System 上侦听全局消息(系统范围的消息)

所以我们有一个用于个人消息主题的多主题消费者和一个用于全局消息主题的消费者。

所以我有几个问题:

  1. 是作为两个不同的消费者(共享相同的处理函数)还是作为一个多主题消费者更好?
  2. 如何检查客户端 A 实际上是听 Chat.A 的人,而不仅仅是知道如何编写 BlazeDS 客户端的其他人?我们有 Spring Security,但是如果他们的用户名(从安全上下文中提取)与他们请求的子主题不匹配,我该如何监听订阅请求并阻止它们?

我也读过选择器。好吧,这看起来很有希望,但是,当消费者使用该消费者时,我如何检查该selector="for == A || for == System消费者是否属于已验证为该“for”用户的客户端。

  1. 选择器如何与子主题进行比较/对比?他们每个人的最佳情况是什么?
4

2 回答 2

1

选择器基本上是一个表达式,您可以使用它来过滤哪些消息将通过您的消费者发送。根据文档,它使用 SQL 92 条件表达式语法:

http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=messaging_6.html

子主题是选择器的一种特殊情况,过滤掉“DSSubtopic”标头与提供的值不匹配的消息。

了解这两者的重要一点是客户端决定将哪些消息发送给它,因此不能完全依赖它来确保安全性。

要根据经过身份验证的用户身份实现基于服务器的安全消息过滤,请在此处查看我对相关问题的回答:

Flex 消息安全

至于多个消费者与 MultiTopicConsumer,不确定。他们都将使用相同的底层 ChannelSet,所以它不应该有很大的性能差异。我认为这主要是一个问题,是否有一个事件处理程序来响应来自 MultiTopicConsumer 的所有消息是否方便,或者是否更容易为每个消费者提供单独的事件处理程序。

于 2009-09-27T03:23:07.363 回答
0

我通常为此使用子主题。但是,如果您这样做,请确保您禁用对通配符子主题的订阅

于 2009-09-28T15:56:35.423 回答