防止本地接收已发布的消息

时间:2012-02-28 02:34:12

标签: java jetty comet cometd

设置:

一个服务器类(AbstractService的扩展) 一个cometd客户端(自定义C实现,但与此问题无关)

小问题: 如果我的服务器类发布到它自己的通道,则会调用handleMessage函数。一般来说,我真的不希望这样,但我可以解决它(服务器不需要知道服务器何时发送消息)。我可以使用ServerSession.deliver而不是发布吗?

真正的问题: 在我的客户端上,我在服务器类的频道上向服务器发送消息。调用服务器的handleMessage函数,但是消息也会被发送回原始客户端。有没有办法配置服务器,以便不将消息发送回原始客户端?

我看到了Extension类,但是这似乎只是在向单独的客户端发送消息的一个级别上运行(如果我在此处终止消息,它不会被发送到任何客户端,包括服务器)。

有什么想法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果邮件被发送回原始发件人,则可能已订阅该频道。

您没有指定频道的名称,但您应该了解广播频道和服务频道之间的不同,请参阅here

如果您的客户端发布到服务频道,则消息将到达服务器并且不会向订阅者广播,而如果您的客户端发布到广播频道,则服务器将其广播给订阅者(其中包括您的客户端),以便可能是您的客户收到消息的原因。

ServerSession.deliver()可用于(在任何频道上)向特定客户端执行消息传递(而不是向所有订阅者广播)。

如果您的客户不需要广播该消息,那么通常最好的解决方案是使用服务频道。