2013-04-28 6 views
0

Я пытаюсь создать очень простое приложение cometD. В основном я хочу динамически создавать каналы. Сначала я попробовал каналы локализации и после создания подписанных им через javascript на стороне клиента. Он работает отлично, но не для создания динамического канала. Пусть я прошел переменную ПЗУ с помощью яваскрипта ROOM: 'firstroom' это создаст канал, как "/members/firstroom".Cometd, как сделать и подписаться на канал динамически?

Но на другом вызов от другого пользователя, как НОМЕР: «» anotherroom Это Creats другой комнаты, но уничтожил старую комнату.

Простыми словами я хочу, чтобы все динамически созданные каналы сохранялись в памяти. Клиент сессии я пытался:

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/* и отфильтровать сообщения для нежелательных номеров. В качестве альтернативы сервер должен отправить клиенту сообщение, сообщающее ему, к какому каналу нужно подписаться.

0

Если вы создаете каналы динамически со стороны сервера, вы должны посмотреть на createIfAbsent method of the BayeuxServer class. Это позволяет указать путь канала и создать (и инициализировать) ServerChannel, если он отсутствует.