socket example websocket publish-subscribe juggernaut bayeux socket.io

websocket - example - socket io https



Faye vs. Socket.IO(y Juggernaut) (3)

Socket.IO parece ser la biblioteca de emulación WebSocket más popular y activa. Juggernaut usa para crear un sistema de pub / sub completo.

Faye también es popular y activa, y tiene su propia biblioteca de JavaScript, por lo que su funcionalidad completa es comparable a Juggernaut. Juggernaut usa un nodo para su servidor, y Faye puede usar cualquier nodo o rack. Juggernaut usa Redis para persistencia ( corrección: usa Redis para pub / sub), y Faye solo mantiene el estado en la memoria.

  1. ¿Todo lo anterior es exacto?
  2. Faye dice que implementa Bayeux - creo que Juggernaut no hace esto - es porque Juggernaut es de nivel inferior (IE, puedo implementar Bayeux usando Juggernaut)
  3. ¿Podría Faye cambiar a usar la biblioteca JavaScript del navegador Socket.IO si quisiera? ¿O sus bibliotecas de JavaScript hacen cosas fundamentalmente diferentes?
  4. ¿Hay alguna otra diferencia de arquitectura / diseño / filosofía entre los proyectos?

  1. AFAIK, sí, aparte del hecho de que Juggernaut solo usa Redis para Pubsub, no persistencia. También significa que ya se han escrito las bibliotecas de los clientes en la mayoría de los idiomas (ya que solo necesita un adaptador Redis).
  2. Juggernaut no implementa Bayeux, sino que tiene un protocolo JSON personalizado muy simple
  3. Dunno, probablemente
  4. Juggernaut es muy simple, y está diseñado para ser así. Aunque no he usado Faye, de los documentos parece que tiene muchas más funciones que solo PubSub. Construir sobre Socket.IO tiene sus ventajas también, Juggernaut es compatible con prácticamente todos los navegadores, tanto de escritorio como móviles.

Estaré realmente interesado en lo que el autor de Faye tiene que decir. Como digo, no lo he usado y sería genial saber cómo se compara con Juggernaut. Probablemente sea el caso de usar la mejor herramienta para el trabajo. Si lo que necesitas es pubsub, Juggernaut lo hace muy bien.



Divulgación: soy el autor de Faye.

  1. En cuanto a Faye, todo lo que has dicho es verdad.
  2. Faye implementa la mayor parte de Bayeux, lo único que falta en este momento son los canales de servicio, de los cuales aún no estoy convencido de la utilidad de. En particular, Faye está diseñado para ser compatible con la implementación de referencia CometD de Bayeux, que tiene una gran relación con lo siguiente.
  3. 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 de servidor requiere Socket.IO, y el requisito de que el cliente de Faye (hay clientes del lado del servidor en Node y Ruby, recuerden) puedan hablar con cualquier servidor de Bayeux (y el Faye servidor a cualquier cliente de Bayeux) puede ser un factor decisivo.
    • Bayeux tiene requisitos específicos para que los servidores y clientes admitan ciertos tipos de transporte, y dice cómo negociar cuál usar. También especifica cómo se usan, por ejemplo, cómo el tipo de contenido de una solicitud de XHR afecta la forma en que 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 muere un nodo WebSocket .
    • Corrígeme si tengo algo de esto mal: esto se basa en un análisis superficial de la documentación de Socket.IO.
  4. Faye es solo pub / sub, simplemente se basa en un protocolo un poco más complejo y tiene muchas sutilezas integradas:
    • Extensiones del servidor y del lado del cliente
    • Comodín de coincidencia de patrones en las rutas de los 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 servidor en Node y Ruby

Faye probablemente se ve mucho más compleja en comparación con Juggernaut porque Juggernaut delega más, por ejemplo, delega la negociación de transporte en Socket.IO y el enrutamiento de mensajes a Redis. Estas son buenas decisiones, pero mi decisión de usar Bayeux significa que tengo que hacer más trabajo yo mismo.

En cuanto a la filosofía del diseño, el objetivo primordial de Faye es que debería funcionar en todos los sitios donde la Web esté disponible y que sea absolutamente trivial. Es muy sencillo comenzar, pero su extensibilidad significa que puede personalizarse 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 hay trabajo en curso para hacerlo más flexible en el lado del servidor. Estoy buscando agregar soporte de clúster y hacer que el motor de pub secundario se pueda conectar para que pueda usar Faye como una interfaz web sin estado para otro sistema de pub-sub como Redis o AMQP.

Espero que esto haya sido útil.