2012-02-28 169 views
1

的設置的本地接待:預防發佈的消息

一個服務器類(AbstractService的擴展) 一個的cometd客戶端(定製C實現,但是無關這個問題)

小問題: 如果我服務器類發佈到它自己的頻道,它的handleMessage函數被調用。一般來說,我並不真的希望這樣做,但我可以解決它(服務器不需要知道服務器何時發送消息)。我可以使用ServerSession.deliver而不是發佈嗎?

真正的問題: 在我的客戶,我將消息發送到服務器類的頻道服務器。服務器的handleMessage函數被調用,但是該消息也被髮送回原始客戶端。有沒有辦法配置服務器,使消息不被髮回給始發客戶端?

只見擴展類,但這似乎上面的操作將消息發送到不同的客戶只有一個級別(如果我在這裏殺的消息,它不會發送到任何客戶端,包括服務器)。

任何想法? 在此先感謝!

回答

1

如果消息被髮送回原始發件人,那麼它很可能訂閱該頻道。

沒有指定頻道的名字,但你應該明白廣播渠道和服務渠道,看到here之間的不同。

如果您的客戶端發佈到服務頻道,則該消息到達服務器並且不會廣播給訂閱者,而如果您的客戶端發佈到廣播頻道,則服務器將其廣播給訂閱者(其中包括您的客戶端)那很可能是你的客戶收到消息的原因。

ServerSession.deliver()可用於執行消息傳遞(在任何通道上)至特定的客戶端(相對於廣播到所有用戶)。

如果您的客戶端不需要的消息被廣播,則通常是最好的解決方案是使用一種服務渠道。

+0

謝謝!我知道我錯過了一些簡單的事情。我顯然完全跳過了手冊的服務部分! – Arsinio 2012-02-28 23:03:33