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

Java 防止本地接收已发布的消息,java,jetty,comet,cometd,Java,Jetty,Comet,Cometd,设置: 一个服务器类(AbstractService的扩展) 一个Comet客户端(自定义C实现,但与此问题无关) 小问题是: 如果我的服务器类发布到它自己的通道,则会调用它的handleMessage函数。一般来说,我并不希望这样,但我可以解决这个问题(服务器不需要知道服务器何时发送消息)。我可以使用ServerSession.deliver而不是publish吗 真正的问题是: 在我的客户机上,我通过服务器类的通道向服务器发送消息。服务器的handleMessage函数被调用,但是消息也被发

设置:

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

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

真正的问题是: 在我的客户机上,我通过服务器类的通道向服务器发送消息。服务器的handleMessage函数被调用,但是消息也被发送回原始客户端。是否有办法配置服务器,使消息不会发送回原始客户端

我看到了扩展类,但它似乎只比向单独的客户机发送消息高一个级别(如果我在这里杀死消息,它不会被发送到任何客户机,包括服务器)

有什么想法吗?
提前谢谢

如果消息被发送回原始发件人,那么它很可能订阅了该频道

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

如果您的客户端发布到服务频道,则消息将到达服务器,而不会广播到订阅者;如果您的客户端发布到广播频道,则服务器将其广播到订阅者(其中包括您的客户端),因此,您的客户端很可能会收到消息

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


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

如果消息被发送回原始发送者,则可能已订阅该频道

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

如果您的客户端发布到服务频道,则消息将到达服务器,而不会广播到订阅者;如果您的客户端发布到广播频道,则服务器将其广播到订阅者(其中包括您的客户端),因此,您的客户端很可能会收到消息

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


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

谢谢!我知道我错过了一些简单的事情。我显然完全跳过了手册的服务部分!谢谢我知道我错过了一些简单的事情。我显然完全跳过了手册的服务部分!