¿Cuáles son las ventajas competitivas de Pusher vs. PubNub?

He creado grandes aplicaciones web de producción con Pusher y PubNub, y también he migrado aplicaciones de una a otra. La mayor diferencia entre los dos servicios es el hecho de que PubNub usa transmisión HTTP / sondeo largo, mientras que Pusher usa WebSockets. WebSockets es claramente la mejor tecnología a largo plazo, pero hoy en día no es confiable en ciertos escenarios. Afortunadamente, Pusher también agregó una alternativa de sondeo largo HTTP en caso de que WebSockets no funcione.

Voy a entrar en más detalles a continuación:

Herramientas de depuración
Tanto Pusher como PubNub proporcionan algunas herramientas de depuración. Me parece que Pusher es más fácil de usar. Por ejemplo, en Pusher puede abrir la consola de depuración y ver pasar todos sus mensajes. En PubNub, debe pegar el nombre exacto del canal que desea escuchar. Lo cual está bien si el nombre de su canal es simple, pero es un gran dolor si su nombre de canal tiene una larga cadena de caracteres aleatorios. ¿Por qué harías tal cosa? Bueno, eso me lleva a …

Seguridad / Canales privados
Tanto PubNub como Pusher admiten el envío de mensajes a través de canales encriptados.

Pusher tiene un enfoque simple para la autorización llamado canales privados (http://pusher.com/docs/client_ap…) que le permite autenticar que un usuario tiene acceso a un canal en particular al proporcionar una clave de autorización firmada por su clave secreta. Esto le permite autenticarse en función del usuario actualmente conectado, por ejemplo.

PubNub tiene dos enfoques para la autorización. Puede 1) pagar una tarifa mensual adicional (en el momento de escribir este artículo $ 149 / mes) por su función de Access Manager, que permite otorgar explícitamente a los usuarios permiso de lectura / escritura a canales específicos a través de su API de Access Manager o 2) generar un canal único nombres insertando un token secreto impredecible en los nombres de su canal (defendido en este tema de github: https://github.com/pubnub/pubnub…)

Delegación de eventos
Pusher tiene un buen modelo de canal / evento donde puedes suscribirte a un canal, pero luego vincular devoluciones de llamada a eventos específicos a través de ese canal. He descubierto que esta es una forma bastante natural de implementar eventos de mensajes. PubNub no tiene nada similar. En su lugar, debe crear un canal separado para cada evento o rodar la delegación del evento usted mismo.

Editar: El CTO de PubNub dijo que PubNub admite un modelo de evento, pero tuve problemas para encontrar cualquier documentación o entender cómo funciona, pero me envió este enlace en referencia a él: pubnub / javascript

Tamaño del mensaje
PubNub limita los mensajes a 1.800 bytes, lo que puede no ser suficiente según lo que esté enviando. Esto me ha resultado problemático cuando parte de lo que estoy presionando son datos ingresados ​​por el usuario que tienen una longitud variable. Le permiten aumentar el tamaño máximo a 7.2k por una tarifa mensual adicional ($ 149 en el momento en que escribo esto)

Para empeorar las cosas, su gema de rubí falla silenciosamente cuando el mensaje es más largo que eso, lo que me ha costado horas de tiempo de depuración tratando de descubrir por qué no se reciben mis mensajes.

Los límites de Pusher son de 10 kb por mensaje como parte de su oferta normal (consulte: ¿Cuál es el límite de tamaño de mensaje al publicar un mensaje?) Ofrecen tamaños de mensaje más grandes para planes empresariales.

Canales de presencia
Tanto Pusher como Pubnub tienen canales de presencia, que podrían serle útiles si está implementando un sistema de chat, etc. Todavía no los he usado o necesitado.

Resumen
En general, descubrí que Pusher tiene una mejor documentación / ejemplos, una mejor API y mejores herramientas de backend / depuración. Realmente me gustan los canales privados que ofrece Pusher, mensajes de mayor tamaño y la capacidad de enviar diferentes eventos a través de un solo canal y solo suscribirse a eventos particulares. Pero vale la pena evaluar y crear prototipos con ambos para descubrir cuál satisface mejor sus necesidades particulares.

WebSockets vs HTTP Streaming / Long-Polling

Estoy de acuerdo con Max en los beneficios de Pusher sobre PubNub, pero me gustaría hablar un poco más sobre WebSockets vs HTTP Streaming / Long-Polling. Creo que eventualmente WebSockets será el mejor mecanismo de transporte para los navegadores web, pero por el momento los navegadores más antiguos deben recurrir al uso de una conexión de socket Flash. La transmisión HTTP y el sondeo largo pueden funcionar entre navegadores, aunque la implementación debe ser diferente entre navegadores para lograr la misma conectividad (por ejemplo, XmlHttpRequest en Firefox y Chrome pero XDomainRequest en IE. Reemplazo de varias partes en Firefox, aumentando continuamente la respuesta Texto en Chrome / IE significa que se requiere una reconexión).

WebSockets y HTTP Streaming / Long-Polling se han diseñado para funcionar con la infraestructura de Internet existente, por lo que es importante que se utilicen los puertos 80 y 443 siempre que sea posible. La transmisión HTTP / sondeo largo se considera hacks, ya que el protocolo WebSocket se ha diseñado desde cero teniendo en cuenta la comunicación bidireccional en tiempo real. Los WebSockets son una tecnología relativamente nueva que todavía está evolucionando, pero se están volviendo mucho más confiables. Mi opinión personal es que la brecha se ha reducido considerablemente entre la transmisión HTTP / sondeo largo y WebSockets durante el año pasado y siempre y cuando exista un mecanismo alternativo, ambas soluciones son iguales. Avanzar en WebSocket tendrá una ventaja definitiva ya que elimina la necesidad de sobrecarga de encabezado HTTP con cada conexión / mensaje y funcionará de la misma manera entre todos los navegadores web y otros clientes de soporte WebSocket gracias a un estándar que se está desarrollando continuamente. Por lo tanto, WebSockets ofrecerá la latencia más baja y la solución más confiable.

Conectar todo

Si un servicio ofrece una solución de transmisión HTTP, existe una buena posibilidad de que haya API de cliente disponibles para otras tecnologías de cliente. Creo que es muy importante que recordemos que los clientes pueden ser cualquier dispositivo habilitado para la web y no solo navegadores web. Entonces, si el cliente no va a ser un navegador web, sugeriría que PubNub tenga la ventaja aquí. Dicho esto, las bibliotecas de WebSocket (.NET, Silverlight, Objective-C, Java) ahora están apareciendo para una gran cantidad de tecnologías, por lo que la disponibilidad de WebSockets está aumentando todo el tiempo.

WebSockets vs. HTTP Streaming: ¿a quién le importa?

Llevando el argumento de WebSockets vs. HTTP Streaming un poco más lejos, ¿debería importarle al desarrollador? El servicio en sí debe usar el mejor transporte de conexión para el dispositivo cliente. Si un usuario viene ejecutando Chrome, entonces se debe usar WebSockets, pero si esa conexión falla (problemas de proxy o firewall), entonces debería recurrir a la transmisión HTTP / sondeo largo. Si el usuario aparece usando Windows Mobile 6.5 con el navegador web Dorothy, debe usar la transmisión XMLHttpRequest.

More Interesting

¿Cuáles son los mejores CMS o plataformas para construir mi propio sitio web para vender mis canciones?

¿Es el patrón modelo-vista-controlador apropiado (o incluso preferido) para aplicaciones web escritas en Javascript? ¿Por qué?

¿Cuáles son las mejores prácticas para aprender tecnologías web?

Cómo usar un lector de huellas digitales en un sistema de asistencia basado en la web

¿Por qué debería uno usar un marco de front-end MVC (como) para construir una aplicación web?

¿Qué base de datos debo usar para una aplicación web excelente en la que estoy trabajando: MongoDB, PostgreSQL o MySQL, con MongoDB / Redis como secundario?

¿Hay algún tipo de servicio web para el que Ruby on Rails sea muy adecuado?

¿Qué es Letsapp?

¿Qué es lo más complicado que has hecho con Zapier?

¿Cuándo se usa generalmente un para cada ciclo para aplicaciones web?

Si hago una aplicación web en Angular2 que se ejecuta en AWS (S3, DynamoDB), ¿todavía necesito hacer alguna programación del lado del servidor (como Play o PHP o Python)?

¿Cuál es un método fácil para crear una aplicación web 'Room Visualization'?

¿Cuál es el requisito de hardware (infraestructura) necesario para que Jmeter cargue grandes aplicaciones web de prueba? (Digamos, sitios web y aplicaciones de la universidad).

¿Cuáles son los mejores lenguajes de programación en 2015 para construir una aplicación web full stack?

¿Cómo probar aplicaciones web creadas en WordPress? No tengo experiencia en pruebas de software. ¿Qué herramientas debo estudiar y usar?