Divulgación: soy el autor de Faye.
- Respecto a Faye, todo lo que has dicho es cierto.
- Faye implementa la mayor parte de Bayeux, lo único que falta en este momento son los canales de servicio, de los que aún no estoy convencido de su utilidad. En particular, Faye está diseñado para ser compatible con la implementación de referencia CometD de Bayeux, que tiene una gran influencia en lo siguiente.
- Conceptualmente, sí: Faye podría usar Socket.IO. En la práctica, existen algunas barreras para esto:
- No tengo idea de qué tipo de soporte del lado del servidor requiere Socket.IO, y el requisito de que el cliente Faye (hay clientes del lado del servidor en Node y Ruby, recuerde) pueda hablar con cualquier servidor Bayeux (y el Faye servidor a cualquier cliente Bayeux) puede ser un factor decisivo.
- Bayeux tiene requisitos específicos de que los servidores y los clientes admitan ciertos tipos de transporte, y dice cómo negociar cuál usar. También especifica cómo se utilizan, por ejemplo, cómo afecta el tipo de contenido de una solicitud XHR a cómo se interpreta su contenido.
- Para algunos tipos de manejo de errores, necesito acceso directo al transporte, por ejemplo, reenviar mensajes cuando un cliente se vuelve a conectar después de que un Node WebSocket muere .
- Por favor, corríjame si me equivoco en algo de esto, esto se basa en un escaneo superficial de la documentación de Socket.IO.
- Faye es solo pub / sub, solo se basa en un protocolo un poco más complejo y tiene muchas sutilezas integradas:
- Extensiones del lado del servidor y del cliente
- Coincidencia de patrones comodín en rutas de canales
- Reconexión automática, por ejemplo, cuando los WebSockets mueren o el servidor se desconecta
- El cliente funciona en todos los navegadores, en teléfonos y en el lado del servidor en Node y Ruby
Faye probablemente parece mucho más complejo en comparación con Juggernaut porque Juggernaut delega más, por ejemplo, delega la negociación de transporte a Socket.IO y el enrutamiento de mensajes a Redis. Ambas son buenas decisiones, pero mi decisión de utilizar Bayeux significa que tengo que trabajar más yo mismo.
En cuanto a la filosofía de diseño, el objetivo primordial de Faye es que debería funcionar en todos los lugares en los que la Web esté disponible y debería ser absolutamente trivial para empezar. Es realmente sencillo comenzar, pero su extensibilidad significa que se puede personalizar de maneras bastante poderosas, por ejemplo, puede convertirlo en un servicio de inserción de servidor a cliente (es decir, evitar que los clientes arbitrarios lo presionen) agregando extensiones de autenticación .
También se está trabajando para que sea más flexible en el lado del servidor. Estoy pensando en agregar soporte de agrupación en clústeres y hacer que el motor principal pub-sub sea enchufable para que pueda usar Faye como una interfaz web sin estado para otro sistema pub-sub como Redis o AMQP.
Espero que esto te haya sido de ayuda.