2011-02-04 15 views
98

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

Faye también es popular y activo, 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. ¿Está todo por encima de la precisión?
  2. Faye dice que implementa Bayeux - creo Juggernaut no hace esto - es que debido a Juggernaut es de nivel inferior (es decir, que puede poner en práctica usando Bayeux Juggernaut)
  3. podrían cambiar a Faye usando el navegador Socket.IO Javascript biblioteca 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?
+3

¡Por las dudas, Juggernaut ha quedado en desuso! Lea por qué http://blog.alexmaccaw.com/killing-a-library. – Maziyar

+0

HTML 5 Los eventos enviados por el servidor parecen ser la alternativa recomendada según el autor de Juggernaut – Harindaka

Respuesta

117

Divulgación: soy el autor de Faye.

  1. En cuanto a Faye, todo lo que ha 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 estoy convencido de la utilidad. 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 Socket de soporte del lado del servidor.IO requiere, y el requisito de que el cliente de Faye (hay clientes del lado del servidor en Node y Ruby, recuerde) pueda hablar con cualquier servidor de Bayeux (y el servidor de Faye con cualquier cliente de Bayeux) puede ser un factor decisivo.
    • Bayeux tiene requisitos específicos que los servidores y clientes admiten 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 resending messages when a client reconnects after a Node WebSocket dies.
    • Corrígeme si tengo algo de esto mal, esto se basa en un escaneo superficial de la documentación de Socket.IO.
  4. Faye está de pub/sub, es sólo basado en un protocolo ligeramente más complejo y tiene muchas maravillas construidas en:
    • del servidor y del lado del cliente extensiones
    • Comodín de coincidencia de patrones en rutas de canales
    • Reconexión automática, p. ej. cuando WebSockets mueren o el servidor se cierra
    • El cliente funciona en todos los navegadores, en los teléfonos, y del lado del servidor en el nodo y Ruby

Faye probablemente se parece mucho más compleja en comparación con Juggernaut porque Juggernaut delega más, por ej. delega la negociación de transporte a 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 web disponibles y que debería ser 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 trabajos 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.

+1

Gracias por una gran respuesta. No me di cuenta de la flexibilidad del protocolo de Bayeux, por lo que un cliente arbitrario debería poder hablar con servidores arbitrarios/múltiples. ¿Conoces algún proyecto o servicio de producción que aproveche al máximo esto? –

+4

Recientemente me mudé de Socket.IO a Faye, y debo decir que Faye guardó mi aplicación. Con un simple servidor Faye y un servidor mediano, mi aplicación puede manejar 6000 usuarios simultáneamente de acuerdo con Google Analytics –

13
  1. yo sepa, sí, aparte del hecho de Juggernaut sólo se utiliza para Redis 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 aplicar Bayeux, sino que tiene una forma muy sencilla a medida protocolo JSON
  3. No sé, probablemente
  4. Juggernaut es muy simple, y diseñado para ser de esa manera. 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.

+0

Gracias por la excelente respuesta. No me di cuenta de que Redis solo se usaba para sus funciones de pub/sub. Me hizo preguntar esto: http://stackoverflow.com/questions/4938520 –