1

设置:

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

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

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

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

有任何想法吗?提前致谢!

4

1 回答 1

1

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

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

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

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

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

于 2012-02-28T08:04:40.317 回答