2013-04-28 84 views
0

我想創建一個非常簡單的彗星應用程序。 主要我想動態地創建渠道。 首先,我嘗試了localsession頻道,並通過客戶端JavaScript創建訂閱後。 它工作完美,但不適合動態頻道創作。 讓我通過JavaScript ROOM: 'firstroom' 此通過ROM變量將創建一個通道一樣"/members/firstroom".Cometd如何動態訂閱頻道?

但是從樣室的另一用戶另一個呼叫: 「anotherroom」這外幣另一個房間,但被破壞的舊房間。

簡言之,我希望所有動態創建的通道存儲在內存中。 客戶端會話我想:

ClientSessionChannel channel = _session.getLocalSession().getChannel('/members/'+room); 
channel.publish(members); 

然後我試圖創建和訂閱服務器上是這樣的:

ServerChannel channel = _bayeux.getChannel("/member"+room); 
LocalSession localSession = _session.getLocalSession(); 

channel.subscribe(client); 
ServerMessage.Mutable forward = _bayeux.newMessage(); 
forward.setData(_members); 

channel.publish(localSession, forward); 

但我想服務器端訂閱新資料將如何改變cliend側HTML代碼。 如何

channel.publish(localSession, forward); 

將取代

$.cometd.subscribe('/members', manage_members); 

其中manage_members去在服務器端訂閱新資料。

直前進如何動態創建和存儲頻道?

回答

1

我不知道我完全理解這個問題,但如果客戶端知道信道的動態部分,您可以輕鬆地從JavaScript通過訂閱:

cometd.subscribe('/members/' + roomName, function(message) { ... }); 

CometD JavaScript documentation about subscription

如果在服務器端計算動態部分,則您的客戶端 - 爲了接收消息,必須訂閱/members/*並過濾掉不需要的房間的消息。 或者,服務器應該向客戶端發送一條消息,告訴它要訂閱的確切頻道是什麼。