Divulgação: Eu sou o autor de Faye.
- Quanto a Faye, tudo o que você disse é verdade.
- Faye implementa a maior parte do Bayeux, a única coisa que falta agora são os canais de serviço, dos quais ainda não estou convencido da utilidade. Em particular, Faye é projetado para ser compatível com a implementação de referência CometD de Bayeux, que tem uma grande influência no seguinte.
- Conceitualmente, sim: Faye poderia usar Socket.IO. Na prática, existem algumas barreiras para isso:
- Não tenho ideia de que tipo de suporte do lado do servidor Socket.IO requer, e o requisito de que o cliente Faye (há clientes do lado do servidor em Node e Ruby, lembre-se) seja capaz de se comunicar com qualquer servidor Bayeux (e o Faye servidor para qualquer cliente Bayeux) pode ser um disjuntor.
- Bayeux tem requisitos específicos de que servidores e clientes suportem certos tipos de transporte e diz como negociar qual deles usar. Ele também especifica como eles são usados, por exemplo, como o Content-Type de uma solicitação XHR afeta como seu conteúdo é interpretado.
- Para alguns tipos de tratamento de erros, preciso de acesso direto ao transporte, por exemplo, reenviar mensagens quando um cliente se reconecta depois que um Node WebSocket morre .
- Por favor, corrija-me se eu entendi algo errado - isso é baseado em uma varredura superficial da documentação Socket.IO.
- Faye é apenas pub / sub, é apenas baseado em um protocolo um pouco mais complexo e tem muitas sutilezas integradas:
- Extensões do lado do servidor e do cliente
- Correspondência de padrões curinga em rotas de canal
- Reconexão automática, por exemplo, quando WebSockets morrem ou o servidor fica offline
- O cliente funciona em todos os navegadores, em telefones e no lado do servidor em Node e Ruby
Faye provavelmente parece muito mais complexo em comparação com Juggernaut porque Juggernaut delega mais, por exemplo, ele delega negociação de transporte para Socket.IO e roteamento de mensagens para Redis. Ambas as decisões são boas, mas minha decisão de usar Bayeux significa que tenho que trabalhar mais sozinho.
Quanto à filosofia de design, o objetivo primordial de Faye é que funcione em todos os lugares em que a Web estiver disponível e seja absolutamente trivial para começar. É muito simples de começar, mas sua extensibilidade significa que pode ser personalizado de maneiras bastante poderosas, por exemplo, você pode transformá-lo em um serviço push de servidor para cliente (ou seja, interromper o envio de clientes arbitrários para ele) adicionando extensões de autenticação .
Também há um trabalho em andamento para torná-lo mais flexível no lado do servidor. Estou pensando em adicionar suporte a cluster e tornar o mecanismo pub-sub principal plugável para que você possa usar Faye como um front-end da Web sem estado para outro sistema pub-sub, como Redis ou AMQP.
Espero que isso tenha sido útil.