2011-01-27 23 views
6

Estoy construyendo un servidor JSON-RPC que acepta solicitudes a través de HTTP. Me gustaría admitir la comunicación bidireccional (el cliente y el servidor pueden enviar solicitudes), el caso de uso específico es una arquitectura de publicación/suscripción donde un cliente envía una solicitud subscribe(X) y recibe changed(X) solicitudes en (casi) tiempo real. Por lo que yo sé, hay varias formas de implementar esto con HTTP:Comunicación bidireccional JSON-RPC en tiempo real a través de HTTP

  • sondeo largo
  • websockets
  • llamadas de votación utilizando un modelo de sesión basada en cookies
  • de streaming (manteniendo la conexión HTTP abiertas)
  • una combinación de algunos de los anteriores

lo que estoy buscando es una solución que se basa en estándares de Internet aceptadas (si es posible), utilizable desde un navegador web y fácil de usar en el lado del cliente. Hasta ahora, estoy a favor de la transmisión (Twitter, CouchDB lo hago de esa manera), pero no estoy seguro de cuán bien esto es compatible con los navegadores y las bibliotecas JSON-RPC. Además, puede haber otras formas de hacerlo de las que no tengo conocimiento.

Gracias de antemano.

Respuesta

3

Que yo sepa, Streaming es soportado por FF, Chrome (tiene problemas bufffering que requieren un tipo de datos de la aplicación/octet-stream o un preludio para trabajar) e IE8 (a través de un pequeño XDomainRequest). No sé sobre la ópera.

Realmente no conozco ningún estándar de la industria de cometas, el Bayeux es probablemente el más cercano. Es difícil ver cómo lo hace Facebook/gmail/twitter ya que todo el código está ofuscado, y es extremadamente difícil encontrar mucha información sobre cómo todos los navegadores manejan todo.

Aún más difícil es que tendrá que usar un servidor especializado, mantener abiertas muchas conexiones requerirá la agrupación de subprocesos, etc. Un servidor normal explotará bastante rápido.

Es un diseño muy potente si puede lograr que funcione de manera confiable.

+0

+1 for the Bayeux link! – keatch

+0

Tornado afirma que puede admitir miles de conexiones en paralelo y se usa en FriendFeed (ahora Facebook). También es de código abierto http://www.tornadoweb.org/. – keatch

Cuestiones relacionadas