我正在尝试为 flex 应用程序创建一个模块,并且我想向客户端发送通知。我一直在寻找 BlazeDS 消息服务来向客户端推送通知,但我希望能够向某些客户端发送某些更新。Flex 通知框架似乎不允许这样做 - 例如,如果我们在消息中有一个具有用户用户 ID 值的字段,那么理论上任何客户端都可以订阅任何给定用户 ID 的所有消息,并且没有验证服务器端以确保已订阅的客户端以该用户 ID 登录。
我在这里错过了什么,还是在客户端编写我自己的轮询机制来处理这个问题的最佳方法是什么?
我正在尝试为 flex 应用程序创建一个模块,并且我想向客户端发送通知。我一直在寻找 BlazeDS 消息服务来向客户端推送通知,但我希望能够向某些客户端发送某些更新。Flex 通知框架似乎不允许这样做 - 例如,如果我们在消息中有一个具有用户用户 ID 值的字段,那么理论上任何客户端都可以订阅任何给定用户 ID 的所有消息,并且没有验证服务器端以确保已订阅的客户端以该用户 ID 登录。
我在这里错过了什么,还是在客户端编写我自己的轮询机制来处理这个问题的最佳方法是什么?
API 中确实有一个解决方案。第一步是编写一个扩展 FlexClientOutboundQueueProcessor 类的类。您需要覆盖一种方法:
public void add(List outboundQueue, Message message);
基本上,您需要做的就是编写一些逻辑来确定是否应该进行以下调用:
outboundQueue.add(message)
简单来说,如果你不把消息加入队列,那么消息就不会被推送到客户端。这个类中另一个重要的方法是:
FlexClient getFlexClient()
您可以使用它来获取关联的 FlexSession 以及最终可能存在于您的应用程序中的身份验证信息。
完成此操作后,您只需使用适当的通道注册处理器。只需在“channel-definition”元素的“properties”元素中添加这个元素:
<flex-client-outbound-queue-processor class="com.foo.YourProcessor"/>
我相信您也可以为队列处理器指定一个嵌套的“属性”元素,但我认为这不是必需的。
只要您禁用通配符订阅,您就可以为此使用子主题。