Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Hacking PubSubHubbub

Saiba como publicar/assinar práticas da web com ferramentas de software livre

Uche Ogbuji, Principal Consultant, Fourthought Inc.
Photo of Uche Ogbuji
Uche Ogbuji é parceiro na Zepheira, onde supervisiona a criação de catálogos da web sofisticados e outros bancos de dados altamente contextuais. Possui um longo histórico de criação pioneira de tecnologias web avançadas, como XML, web de semântica e serviços da web, além de projetos de software livre, como Akara, uma plataforma para aplicativos de dados da web. É engenheiro da computação e escritor. Nascido na Nigéria, vive e trabalha na região de Boulder, Colorado, EUA. É possível saber mais sobre Mr. Ogbuji em seu blog, Copia.

Resumo:  O PubSubHubbub é um protocolo aberto de ganchos da web para notificações de atualizações de feeds de notícias em uma estrutura publicar/assinar. É definido como um conjunto de interações HTTP de servidor para servidor integradas às extensões Atom e RSS. Apesar do nome incomum, o PubSubHubbub é extremamente adequado para projetar aplicativos com muitas atualizações de informações. Saiba mais sobre as implementações padrão e de software livre e o software de suporte para o PubSubHubbub.

Data:  19/Abr/2012
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  2643 visualizações
Comentários:  


É um comum em quase todas as longas viagens de qualquer cultura. A criança no banco de trás não para de perguntar: "Estamos chegando?". "Estamos chegando?"... "Estamos chegando?". Até o momento em que os pais se irritam e gritam "Pare de perguntar. Eu vou avisar quando chegarmos lá!" Essa ilustração provoca riso, mas não há tanta graça ao perceber o quanto a web opera com a mesma abordagem da criança impaciente.

É provável que você use algum tipo de leitor de feed para se manter informado sobre os novos conteúdos do seu publicador favorito em um site de notícias, blog ou journal, como o IBM® developerWorks. Em caso positivo, o leitor deve operar por meio de uma consulta ao site para solicitar a URL de feed a cada 15 minutos ou verificar se há novo conteúdo. Se tanto o leitor de feed quanto o site aproveitarem completamente o HTTP, principalmente os cabeçalhos do Controle de Cache, a troca pela rede será mínima, principalmente nos casos em que não há mudança no feed. Até mesmo o uso mínimo de recursos aumenta o tempo de espera, principalmente se pensarmos na quantidade de pessoas interessadas no mesmo site.

Essa grande quantidade de tráfego desnecessário é um problema real. Por isso, há alguns anos, um grupo de engenheiros do Google decidiu desenvolver uma nova versão do padrão publicar/assinar clássico. A estrutura publicar/assinar é como o pai que está no carro e diz à criança "me diga um ponto de referência, e eu avisarei quando lá chegarmos" para que ela não pergunte se "estamos chegando" incessantemente. Nesse caso, você se inscreve nos feeds pelos quais se interessa e o publicador desses feeds notifica as alterações. Não há necessidade de consulta.

Este recurso já existe há algum tempo, principalmente nos sistemas fechados, mas a abertura da web dificulta a sua implementação de forma útil e segura. Houve outras tentativas como o RSSCloud (consulte Recursos), mas havia a necessidade de uma nova geração da estrutura publicar/assinar para a web. O resultado recebeu o nome incomum PubSubHubbub, geralmente abreviado como "PuSH". Provavelmente, o PuSH foi criado por poucas pessoas no Google, mas foi uma especificação desenvolvida de maneira aberta desde o início do processo, com a participação de muitos contribuidores fora do Google. Melhor ainda, a especificação foi desenvolvida em conjunto com uma implementação de referência em software livre. Também houve outras implementações, mas sempre é interessante que os desenvolvedores de especificação se comprometam com um projeto de referência em software livre para ajudar a iniciar a comunidade.

Neste artigo, apresentaremos o PuSH e mostraremos como começar a usar a implementação de referência em software livre.

Um resumo sobre o PubSubHubbub

É útil dividir o PuSH em três fases: Descoberta, Inscrição e Publicação Isso mostrará rapidamente as partes principais do PuSH, mas não fará um apresentação completa (por exemplo, o PuSH possui um excelente mecanismo para cancelamento de inscrição que merece destaque especial).

Descoberta

A etapa de descoberta começa quando quando um assinante se interessa por um tópico. No PuSH, um tópico é uma URL, e é possível associá-la ao conceito de URL de feed. Cada área do IBM developerWorks possui seu próprio feed RSS. Todos eles podem ser um tópico PuSH, no qual a URL principal é a URL de feed que um cliente que não conhece o PuSH usaria para consulta.

Uma das principais vantagens do PuSH é a possibilidade de permitir que o assinante atual seja diferente do sistema que gerencia suas assinaturas de PuSH. Inclusive é possível estar em um servidor diferente. Isso permite que os usuários transfiram partes do protocolo para uma biblioteca especializada ou a um serviço da web. Muitas descrições do PuSH mencionam o assinante como uma entidade única, mas acreditamos que, de fato, o protocolo define duas entidades distintas. Chamamos uma de agente assinante e outra simplemente de assinante. Em alguns casos, as duas serão implementadas em conjunto, mas não isso não é necessário. A Figura 1 é um diagrama do processo de descoberta.


Figura 1. Processo de descoberta do PuSH

O agente assinante solicita um feed para o assinante e procura um ou mais links especiais no feed para um hub PuSH. A seguir há um exemplo desse tipo de link:

<link rel="hub" href="http://pubsubhubbub.appspot.com"/>

Nesse caso, o feed indica "I publish to the PuSH hub at http://pubsubhubbub.appspot.com". Isso é uma referência de hub PuSH do Google executando em um Google App Engine. É possível usar qualquer hub desejado, incluindo o executado por você com o uso da implementação de software livre do Google.

Se não houver o link de hub PuSH, o agente assinante não poderá fazer mais nada, e o assinante terá que recorrer à consulta, ou a outro mecanismo. Se houver o link, o assinante deve se comunicar com o hub para iniciar a etapa de assinatura.

Assinatura

A Figura 2 é um diagrama do processo de assinatura. O agente envia um HTTP POST ao hub com as informações sobre o retorno de chamada, que é a URL para a qual o hub deve enviar as novas notificações de conteúdo, e o tópico pelo qual o assinante está interessado. Também há um mecanismo de segurança para impedir que malwares causem danos ao se passarem por agentes assinantes e inscrevam as pessoas em feeds não desejados.


Figura 2. Processo de assinatura do PuSH

Quando a assinatura estiver em vigor, o hub irá adicionar a URL de retorno de chamada à sua lista de agentes assinantes para notificar quando o publicador modificar o conteúdo.

Publicação

A Figura 3 é um diagrama do processo de publicação. Quando o tópico é atualizado, ele envia um HTTP POST para todos os seus hubs com a URL atualizada do conteúdo. A especificação chama esse processo de "New Content Notification". Então, cada hub envia uma solicitação GET chamada de "Content Fetch" para o novo conteúdo do tópico. Então, o hub envia o conteúdo atualizado pelo HTTP POST para todos os assinantes em um processo chamado "Content Distribution".


Figura 3. Processo de publicação de PuSH

A força do PuSH

Isso pode parecer um processo elaborado, mas em troca de um pouco de complexidade, o PuSH oferece uma grande oportunidade de descentralização, além de escalabilidade e flexibilidade. A Figura 4 mostra como as interações entre diversos hubs, publicadores, assinantes e agentes assinantes podem ser flexíveis em uma rede PuSH.


Figura 4. Interações entre diversos assinantes, agentes assinantes, hubs e publicadores


"Mostre-me o código"

Agora que possui uma compreensão básica sobre o protocolo, mostraremos como usar a implementação do PuSH com referência do Google em software livre (licença Apache). Particularmente, vamos nos concentrar na implementação do assinante, que permite a configuração de sistemas que funcionam como assinante.

Conheça o código do repositório Subversion do projeto (consulte Recursos) e veja mais sobre o tema. O diretório "subscriber" é um aplicativo App Engine completo. Ele não inclui a parte que chamamos de agente assinante. Ela deve ser fornecida separadamente. Alguns códigos PHP estão incluídos para iniciá-lo no diretório "subscriber_client".

O assinante não pode estar sob a proteção de um firewall, a menos que queira ter o trabalho adicional de configurar o roteador para poder prosseguir. É possível implementar o assinante em sua conta App Engine usando o Google App Engine SDK (consulte Recursos) ou usar o SDK para hospedar uma versão de avaliação do código em qualquer host Linux de sua escolha. A IBM fornece as ferramentas de suporte App Engine (consulte Recursos) para aplicativos de conversão para middleware, mas eles requerem uma implementação Java,™ enquanto a implementação de referência PubSubHubbub está em Python. Demonstraremos o caso em que é possível usar o SDK para hospedar o aplicativo em um host Linux® . Nesse caso, não estará disponível toda a escalabilidade de um backend de armazenamento de dados do Google, mas, de qualquer forma, isso não será necessário para um simples assinante. A Listagem 1 mostra o processo.


Lista 1. Configurando o PubSubHubbub

#Set up the App engine SDK
mkdir -p $HOME/.local/gae
cd $HOME/.local/gae
#Use wget or curl -O
wget http://googleappengine.googlecode.com/files/google_appengine_1.6.2.zip
unzip google_appengine_1.6.2.zip 

#Set up the PubSubHubbub app
svn checkout http://pubsubhubbub.googlecode.com/svn/trunk/ pubsubhubbub-read-only
google_appengine/dev_appserver.py  --address=$ADDR pubsubhubbub-read-only/subscriber/

Esta última linha executa o servidor na porta 8080. Certifique-se de configurar ADDR para o nome de host ou endereço IP do servidor no ambiente. Se executar uma versão do Python superior a 2.5 será exibido um aviso. Nesse caso, não é necessário se preocupar.

Mencionamos que é necessário fornecer seu próprio agente assinante. A vantagem de HTTP simples é que é necessário apenas um comando URL para reproduzir o agente assinante e inscrever seu servidor em um feed. Consulte os comandos na Listagem 2.


Lista 2. Inscrevendo com cURL

curl -v http://pubsubhubbub.appspot.com/subscribe \
-d hub.callback=http://$ADDR:8080/subscriber\&\
hub.topic=http://stackoverflow.com/feeds/tag/python\&\
hub.verify=sync\&hub.mode=subscribe\&hub.verify_token=\&hub.secret=


O comando cURL na Listagem 2 se comunica com o hub do Google e o inscreve em um tópico do web feed Stack Overflow. O Stack Overflow é um site comunitário onde os desenvolvedores podem fazer perguntas e debater sobre problemas. Sabemos que o Stack Overflow usa o hub do Google, portanto, não é necessário se preocupar com a fase de descoberta. Basta escolher o feed para o tópico do Python, que é bastante ativo. Se o processo for bem-sucedido, espera-se receber uma resposta HTTP 204 do cURL. Quando o hub se comunica com o console do assinante em execução devem ser exibidas algumas informações sobre a depuração.

Se aguardar a atualização do feed do Python Stack Overflow, é possível encontrar o assinante atualizado com o conteúdo. É possível ver uma estrutura simples das atualizações do hub usando uma cURL novamente, por exemplo: curl http://addr:8080/items

Onde substitui-se addr pelo servidor assinante, isto é, o mesmo valor que o da variável do ambiente ADDR .

Neste caso, cerca de 1 hora depois, foi encontrado um item selecionado para o assinante, e este apareceu como um conceito entre as linhas exibidas na Listagem 3.


Lista 3. Item selecionado

[{"content": "...",
"source": "http://stackoverflow.com/questions/9155264/xyz-question", 
"title": "XYZ Question",
"time": "2012-01-25 05:11:22.849931"}]

A representação HTML da entrada foi exibida no local das reticências. Essa é uma estrutura fácil para trabalhar com o Python ou para converter para JSON. E, desse modo, é possível publicar/assinar.


Conclusão

A princípio, o PubSubHubbub não é o protocolo mais simples de se compreender, mas não é necessário muito esforço para saber como usá-lo e perceber sua eficiência e funcionalidade para troca de ideias e de códigos pela web entre desenvolvedores de software livre. A implementação com referência em software livre do Google foi dividida por outros usuários, incluindo organizações comerciais, para formar a base de implementações PuSH adicionais. Atualmente, há implementações de hub e de assinante para uma grande variedade de linguagens e plataformas. Há serviços da web disponíveis caso não queria executar o código por si. Sem perceber, você irá hackear a estrutura publicar/assinar por diversão ou mesmo para benefício próprio.


Recursos

Aprender

Obter produtos e tecnologias

  • Saiba mais sobre o PubSubHubbub e obtenha o código de referência na página inicial do projeto.

  • Obtenha a cURL, a ferramenta mais avançada para teste da web e integração de script.

  • Acesse o software de teste IBM (disponível para download ou em DVD) e inove em seu próximo projeto de desenvolvimento de software livre com o uso de softwares específicos para desenvolvedores.

Discutir

Sobre o autor

Photo of Uche Ogbuji

Uche Ogbuji é parceiro na Zepheira, onde supervisiona a criação de catálogos da web sofisticados e outros bancos de dados altamente contextuais. Possui um longo histórico de criação pioneira de tecnologias web avançadas, como XML, web de semântica e serviços da web, além de projetos de software livre, como Akara, uma plataforma para aplicativos de dados da web. É engenheiro da computação e escritor. Nascido na Nigéria, vive e trabalha na região de Boulder, Colorado, EUA. É possível saber mais sobre Mr. Ogbuji em seu blog, Copia.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre, Linux
ArticleID=810583
ArticleTitle=Hacking PubSubHubbub
publish-date=04192012

Conheça a IBM da sua cidade

A IBM está mais perto do que você imagina!