Pergunta

Eu estou trabalhando em um serviço de notificação simples que será usado para enviar mensagens para os usuários a navegar um site. As notificações não devem ser enviadas em tempo real, mas pode ser uma melhor experiência do usuário se eles aconteceu com mais frequência do que dizer a cada 5 minutos. Os dados enviados de e para o cliente não é muito grande e é uma consulta de banco de dados para a frente para recuperar os dados.

Ao ler outras conversas sobre o tema, parece que um impulso AJAX pode resultar em cargas de servidor mais elevados. Desde que eu posso tolerar atrasos servidor mais longos é que vale a pena ter as notificações push servidor ou simplesmente para pesquisa.

Não é muito mais difícil de implementar o cenário de pressão e então eu pensei que eu iria ver o que a opinião era aqui.

Obrigado por sua ajuda.

EDIT: Eu olhei em um simples premir AJAX e implementou uma simples demonstração com base nesta artigo por Mike Purvis. A carga do cliente é bastante baixa em torno de 5k para a versão inicial e espera-se ficar assim por algum tempo.


Obrigado a todos por suas respostas. Eu decidi ir com a solução de votação, mas para envolvê-lo tudo dentro de uma biblioteca de utilitários para que, se eles querem mudá-lo mais tarde é mais fácil.

Foi útil?

Solução

Como o uso de um empurrão requer uma conexão HTTP aberto a ser mantida entre o servidor e cada cliente, eu iria para pesquisa, bem como - não só é que vai consumir uma grande quantidade de recursos do servidor, mas também vai ser significativamente mais complicado de implementar como Matt b mencionado.

A minha experiência com sondagem é que se você tiver um intervalo de pesquisa bastante frequente em um local bastante movimentado seus logs do servidor web pode ficar inundado com pedidos de votação reais rapidamente.

Editar (2017) : Eu diria que suas escolhas são agora estão entre websockets e longo polling (mencionado em outra resposta). Soa como long polling pode ser a escolha certa com base na forma como a pergunta menciona que as notificações não precisa ser recebidos em tempo real, um período pouco frequente votação seria muito fácil de implementar e não deve ser muito desgastante para seu servidor . Websockets são legal e uma ótima opção para muitas aplicações nos dias de hoje, sons como esse pode ser um exagero, neste caso, no entanto.

Outras dicas

ninguém

Estou surpreso aqui mencionou longo polling. meios de votação longos manter uma conexão aberta por um período mais longo (digamos 30-60 segundos), e uma vez que ele está fechado, re abrindo-lo novamente, e simplesmente ter o soquete / conexão ouvir respostas. Isso resulta em menos conexões (mas mais longos), e meios que as respostas são quase imediato (alguns podem ter que esperar por uma nova conexão polling). Eu gostaria de acrescentar que em combinação com tecnologias como NodeJS, isso resulta em uma solução muito eficiente, e de recursos de luz, que é 100% browser compatível em todos os principais navegadores e versões, e não requer nenhuma tecnologia adicional como Comet ou Flash.

Sei que esta é uma questão antiga, mas achei que ele ainda pode ser útil para fornecer estas informações:)

Definitivamente usar empurrar a sua muito mais frio. Se você quiser apenas notificações simples que eu iria usar algo como StreamHub Servidor Push para fazer a pesada carga para você. Desenvolvendo a sua própria funcionalidade Ajax push é um caminho extremamente complicada e rochosa - você tem que fazê-lo funcionar em todos os navegadores e, em seguida, lidar com firewalls e proxies matando conexões keep-alive etc ... Por que re-inventar a roda. Além disso, ele tem um igualmente baixa pegada de menos de 10K por isso deve atender, se isso é uma prioridade para você.

Ambos têm necessidades diferentes e cenários de endereços diferentes.

Se você precisa de em tempo real atualizações , como em um bate-papo on-line, impulso é uma obrigação.

Mas, se o período de atualização é grande , como no seu caso (5 minutos), em seguida, piscina é a solução adequada. Push, neste caso, vai exigir um monte de recursos, tanto do cliente eo servidor.

Dica! tentar fazer a página que verifica a piscina rápidas e limpas, para que ele não consome muitos recursos no servidor em cada solicitação. O que eu costumo fazer é manter uma bandeira na memória (como em uma variável de sessão) que diz que se a piscina está vazia ou não ... então, eu só faço olhar havy na piscina somente se ele não está vazio. Quando a piscina está vazia, que é na maioria das vezes, a solicitação de página funciona extremamente rápido.

Gostaria de implementar uma pesquisa só porque soa mais simples de escrever, e mantendo-o simples é muito valioso.

Não tenho certeza se você tiver tomado uma olhada em algumas das implementações COMET lá fora (que é o que você quer dizer com impulso AJAX).

Se o usuário estiver navegando no site, não que, com efeito, solicitando informações a partir do servidor que esta notificação pode piggy-back on?

É impossível dizer se polling será mais caro, em seguida, empurrando sem saber quantos clientes você terá. Eu recomendo polling porque:

  • Parece que você deseja atualizar os dados cerca de uma vez por minuto. A menos que as notificações são capazes de chegar a um ritmo muito mais rápido do que isso, empurrando significaria que você está mantendo uma conexão HTTP aberto, mas vendo muito pouca atividade sobre ele.
  • Polling é construído em cima de convenções HTTP existentes, de modo que qualquer servidor que fala com navegadores web já está pronto para responder às solicitações do Ajax comuns. Um Comet- ou solução à base de tomada Flash tem diferentes requisitos; você vai precisar de algo como cometd no lado do servidor e uma biblioteca do lado do cliente que empurrão do lado do servidor groks.

Então, se você precisava de algo pesados ??para gerenciar uma torrente de dados e um crapload de clientes, eu recomendo Comet. Mas isso não parece ser o caso.

Há agora um serviço http://pusherapp.com que está tentando resolver este problema de uma vez por todas, em um piscar de olhos. Pode valer à pena dar uma olhada. (Disclaimer: Eu estou em nenhuma maneira associada com eles)

.

Eu não tentei isso sozinho, mas alguns dizem COMET funciona e é mais fácil do que você pensa . Há também um Ruby on Rails plug-in chamado Juggernaut que eu ouvi falou sobre altamente. Novamente, eu não tê-lo usado, então YMMV, mas o meu entendimento é que ele tem muito menos recursos em comparação com polling. Eu acredito que (alguém confirmar lata?) Que COMET é como MacRumorsLive.com oferece live blogging da WWDC Stevenotes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top