2009-10-16 1 views
1

Абонент будет получать контент только с момента его подписки на узел, и все старое содержимое, опубликованное издателем, не будет получено подписчиком. Это верно? Могу ли я узнать, что мне нужно сделать, чтобы абонент получил все предыдущие старые материалы?xmpp понимание pubsub

ответ

4

Вы можете настроить свои узлы на постоянство или переход. Согласно specifictaion (XEP-0060):

Является ли узел постоянным или временным, определяется поле конфигурации «pubsub # persist_items».

Однако ваш сервис pubsub (или сервер) может быть настроен так, чтобы игнорировать постоянство событий. (Если вы используете Openfire, я думаю, что есть конфигурируемый предел для максимального общего размера хранимых вещей)

Как я знаю, что вы используете smackx-pubsub, вот некоторый код:

// create new node 
pubSubManager.createNode(nodeId, newConfigureForm(persistent, includePayload, accessModel) 

// change existing node 
node.sendConfigurationForm(newConfigureForm(persistent, includePayload, accessModel)); 

private ConfigureForm newConfigureForm(final boolean persistent, final boolean includePayload, final AccessModel accessModel) { 
    final ConfigureForm form = new ConfigureForm(FormType.submit); 
    form.setPersistentItems(persistent); 
    form.setDeliverPayloads(includePayload); 
    form.setAccessModel(accessModel); 
    return form; 
} 

PS: Может вы говорите мне, почему я чувствую, что здесь мы делаем пару программ? ;)

+0

Вы будете полезны: \ – cometta

+0

@cometta и @sfussenegger - Вы оставили это, чтобы получить старые предметы, вам нужно выполнить node.getItems(). Кроме того, вместо версии github вы должны создать Smack из своего источника (http://www.igniterealtime.org/downloads/source.jsp), чтобы получить последнюю версию кода pubsub. – Robin

+0

@ Robin так pubsub, наконец, выходит из коробки? начиная с версии 3.2? – sfussenegger