Java 通道中特定客户端的Comed筛选器数据

Java 通道中特定客户端的Comed筛选器数据,java,comet,cometd,Java,Comet,Cometd,我正在设计一个使用comet的系统,其中有一个公共通道用于发布数据。我需要根据客户端订阅详细信息使用某些条件筛选数据。谁能告诉我怎么做?我想我可以用DataFilter来做这件事 Channel.addDataFilter(DataFilter filter); 这是正确的方法吗?如果是这样的话,请用任何示例代码来实现这一点?没有通道。addDataFilter(DataFilter)方法,但您可以用不同的方式实现相同的结果 首先,看看可用的DataFilter实现 然后,只需将一个DataF

我正在设计一个使用comet的系统,其中有一个公共通道用于发布数据。我需要根据客户端订阅详细信息使用某些条件筛选数据。谁能告诉我怎么做?我想我可以用DataFilter来做这件事

Channel.addDataFilter(DataFilter filter);

这是正确的方法吗?如果是这样的话,请用任何示例代码来实现这一点?

没有
通道。addDataFilter(DataFilter)
方法,但您可以用不同的方式实现相同的结果

首先,看看可用的
DataFilter
实现

然后,只需将一个
DataFilterMessageListener
添加到要筛选数据的频道,并在
DataFilterMessageListener
中指定一个或多个
DataFilter

例如,您可以在CometD发行版附带的CometD演示中找到一个例子

添加
DataFilterMessageListener
的正确方法是在通道初始化期间,正如上面通过
@Configure
注释链接的示例中所做的那样,或者通过
ServerChannel.Initializer
进行等效操作

最后,从文档中查看如何在服务器上处理消息:。
重要的是要了解,
DataFilter
所做的修改会被所有订阅者看到。

谢谢。我将按照您建议的方式进行尝试并给出我的反馈。我查看了链接。我发现可以使用它们共同过滤数据。但是如果不需要发送到某个特定的客户端,我需要停止在同一通道中发送数据。我只需要停止为某些客户端发送数据,并为其他客户端启用。有什么帮助吗?再次感谢您的链接。@Suda如果您需要以不同方式向同一频道的不同订户发送数据,则不能使用侦听器或API,如
ServerChannel.publish(…)
,因为它们将向所有订户发送相同的消息。您需要使用
ServerSession.deliver(…)
,从频道的订阅者那里获取
ServerSession
列表。由于您正在对订阅服务器进行迭代,因此可以通过手动应用
数据过滤器来应用/修改每个
ServerSession
的消息。最后,如果从
MessageListener
返回
false
,消息处理将中止。谢谢@sbordet。我会按照你的建议去做。@Bordet,我成功地实现了这一点。但与发布方法相比,这种方法在性能上有什么不同吗?简单地问一下,以下哪项表现更好?使用publish()方法发送到所有订阅的客户端,还是使用deliver方法迭代客户端并发送?谢谢你的建议。