我正在设计一个使用彗星的系统,该系统有一个公共通道来发布数据。我需要使用基于客户端订阅详细信息的某些条件来过滤数据。谁能告诉我该怎么做?我以为可以使用DataFilter做到这一点。
Channel.addDataFilter(DataFilter filter);
这是正确的方法吗?如果是这样,请提供任何示例代码来实现这一目标?
最佳答案
没有Channel.addDataFilter(DataFilter)
方法,但是您可以通过不同的方式获得相同的结果。
首先,看看可用的DataFilter
实现already available。
然后,只需在要过滤数据的通道上添加DataFilterMessageListener
,并为DataFilter
指定一个或多个DataFilterMessageListener
就足够了。
您可以在CometD发行版随附的CometD演示中找到此示例,例如here。
添加DataFilterMessageListener
的正确方法是在通道初始化期间,如在上面通过@Configure
注释或等效地通过ServerChannel.Initializer
链接的示例中所做的那样。
最后,从以下文档中查看服务器上如何处理消息:http://docs.cometd.org/reference/#concepts_message_processing。
重要的是要了解所有订阅者都可以看到DataFilter
所做的修改。