Pregunta

Socket.io Parece ser la biblioteca de emulación WebSocket más popular y activa. Gigante lo usa para crear un pub/subystem completo.

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

  1. ¿Todo es exacto?
  2. Faye dice que implementa Bayeux - Creo que Juggernaut no hace esto, es eso porque Juggernaut es de nivel inferior (es decir, puedo implementar Bayeux usando Juggernaut)
  3. ¿Podría Faye cambiar a usar la biblioteca JavaScript Socket.io Browser si quisiera? ¿O sus bibliotecas JavaScript hacen cosas fundamentalmente diferentes?
  4. ¿Hay otras diferencias arquitectónicas/de diseño/filosofía entre los proyectos?
¿Fue útil?

Solución

Divulgación: Soy el autor de Faye.

  1. Con respecto a Faye, todo lo que has dicho es cierto.
  2. Faye implementa la mayoría de Bayeux, lo único que falta en este momento son los canales de servicio, los que aún no he estado 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 a continuación.
  3. Conceptualmente, sí: Faye pudo Use Socket.io. En la práctica, hay 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) puede hablar con cualquier servidor Bayeux (y el Faye servidor a cualquier cliente de Bayeux) puede ser un factor decisivo.
    • Bayeux tiene requisitos específicos de que los servidores y los 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 XHR afecta cómo se interpreta su contenido.
    • Para algunos tipos de manejo de errores, necesito acceso directo al transporte, por ejemplo Revención de mensajes cuando un cliente se vuelve a conectar después de que un nodo WebSocket muera.
    • Corrígeme si tengo algo de esto incorrecto: esto se basa en un escaneo superficial de la documentación Socket.io.
  4. Faye es solo pub/sub, se basa solo en un protocolo un poco más complejo y tiene muchas sutilezas incorporadas:
    • Extensiones del lado del servidor y cliente
    • Patrones de comodín en rutas de canales
    • Reconexión automática, por ejemplo, cuando WebSockets muere o el servidor se desconecta
    • El cliente funciona en todos los navegadores, en teléfonos y del lado del servidor en el nodo y ruby

Faye probablemente se ve 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 usar Bayeux significa que tengo que hacer más trabajo yo mismo.

En cuanto a la filosofía de diseño, el objetivo primordial de Faye es que debería funcionar en todas partes donde la web está disponible y debería ser absolutamente trivial para comenzar. Es realmente simple comenzar, pero su extensibilidad significa que se puede personalizar de manera bastante poderosa, por ejemplo, puede convertirlo en un servicio de empuje de servidor a cliente (es decir, detener a los clientes arbitrarios que lo presionan) al agregar extensiones de autenticación. .

También hay trabajo en marcha para hacerlo más flexible en el lado del servidor. Estoy buscando agregar soporte de clúster y hacer que el motor de pub-su núcleo sea enchufable para que pueda usar Faye como un interfaz web sin estado para otro sistema de pub-sub como Redis o AMQP.

Espero que esto haya sido útil.

Otros consejos

  1. Afaik, sí, aparte del hecho de que Juggernaut solo usa Redis para PubSub, no de persistencia. También significa que las bibliotecas de clientes en la mayoría de los idiomas ya se han escrito (ya que solo necesita un adaptador Redis).
  2. Juggernaut no implementa Bayeux, sino que tiene un protocolo JSON personalizado muy simple
  3. No sé, 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. Al ser construido sobre Socket.io también tiene ventajas, Juggernaut es compatible con prácticamente en todos los navegadores, tanto de escritorio como móvil.

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 es un pubsub que necesita, Juggernaut lo hace muy bien.

Faye ciertamente podría. Otro ejemplo de un proyecto similar sobre Socket.io:

https://github.com/aaronblohowiak/push-it

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top