2013-04-28 67 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/*并过滤掉不需要的房间的消息。 或者,服务器应该向客户端发送一条消息,告诉它要订阅的确切频道是什么。