ajax - sincronizar - referencias a otras hojas y cómo hacer que los datos de una hoja aparezcan en otra
¿Cómo hacer actualizaciones en vivo similares a Google Docs? (11)
Echa un vistazo a google mobwrite . Es una biblioteca desplegable que permite la edición colaborativa de formularios html a través de la transformación operativa .
Obtener eventos rechazados desde el servidor es la parte fácil, hay en.wikipedia.org/wiki/Comet_(programming) . Asegurar que el estado sea consistente en todos los clientes, esa es la parte difícil. Ahí es donde entra en juego el algoritmo de transformación operacional.
Quiero hacer algo muy similar a la actualización en vivo de Google Doc, donde todos los usuarios pueden ver "inmediatamente" las acciones de los demás usuarios en el documento.
Para lograr esto, mis ideas hasta ahora:
- ¿Se están realizando solicitudes continuas de AJAX en segundo plano (esto parecería un uso intensivo del rendimiento)?
- ¿Seguramente no hay una manera para que el servidor envíe notificaciones a todos sus clientes y las actualice en consecuencia?
- ¿AJAX solicita cada X segundos con un búfer / lapso de tiempo de acciones a realizar en esos X segundos (simulando un efecto en tiempo real)?
Me gustaría conocer la experiencia de otros al tratar de lograr este efecto. ¿Cuál es la mejor manera de hacer esto?
Toda la ayuda es apreciada.
NOTA: No estoy buscando específicamente una solución de edición de documentos en tiempo real. Estoy buscando una solución para el mismo concepto de lo que Google hace con sus documentos. De hecho, usaré esa solución de una manera ligeramente diferente.
Otra alternativa es Orbited :
Orbited proporciona un socket de JavaScript / HTML puro en el navegador. Es un enrutador y cortafuegos web que le permite integrar aplicaciones web con sistemas de back-end arbitrarios. Puede implementar cualquier protocolo de red en el navegador, sin tener que recurrir a complementos.
Orbited es un demonio HTTP que está optimizado para conexiones de cometas de larga duración. Está diseñado para integrarse fácilmente con aplicaciones nuevas y existentes. Orbited le permite escribir aplicaciones web en tiempo real, como una sala de chat o un cliente de mensajería instantánea, sin usar ningún complemento externo como Flash o Java.
Recomiendo usar un marco Comet como Atmosphere . Escogerá automáticamente un mecanismo de transporte para sus mensajes, que puede ser websockets si tiene suerte (pero como esto se abstrae, no tiene que preocuparse). De todos modos, es de gran valor si no tiene que lidiar con solicitudes / respuestas individuales y todas las fuentes de error y los errores del navegador que encontrará. He estado allí. Hay dragones. :-)
Si no quieres usar Web Sockets porque no son ampliamente compatibles, querrás buscar Comet. Así es como Google Docs probablemente lo hace.
Si sus usuarios solo usan navegadores modernos, yo probaría el estándar de websocket que viene con HTML 5. Más y más navegadores lo admitirán en el futuro y compañías como Google y Apple están trabajando en esto. Aquí hay un tutorial de introducción: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
También eche un vistazo a pubsubhubbub - http://code.google.com/p/pubsubhubbub/ Mire el video para una breve introducción.
Un enfoque de Ajax es un camino a seguir. Podrías implementarlo como las aplicaciones de chat. La forma real dependerá de los datos que se visualicen. En breve
- Crear una sesión. Podría albergar a los usuarios que comparten el documento (por ejemplo, archivo de Excel)
- Cuando el usuario A realice un cambio (por ejemplo, actualizar la celda A5), use Ajax para enviar los cambios al servidor. El cambio se puede almacenar con la fecha de llegada o algún valor de índice.
- De vez en cuando, la página dispara una llamada Ajax de fondo. Como parte de la solicitud, la última fecha de acceso también se pasa.
- Al recibir la solicitud, simplemente sirve todos los cambios realizados desde la última vez o el índice. Podría incluir la nueva fecha o valor de índice como parte de la respuesta para que pueda usarse para la próxima solicitud.
- Cuando esté seguro de que no se podrá acceder a los elementos X superiores, puede eliminarlos
Si será un rendimiento intensivo o no dependerá en gran medida de cómo estructurar todo.
Su otra opción es sockets web. No lo he usado personalmente, pero si tiene control sobre qué navegador usarán sus usuarios, podría darle una oportunidad. Permite al servidor enviar datos al navegador. Algunos enlaces: Web Sockets JS y Web Sockets en Firefox
Una forma de limitar el número de solicitudes de ajax es ser inteligente y espaciarlas. No es necesario hacer una solicitud cada segundo. Cuando reciba una respuesta con actividad, realice otra solicitud en 1 segundo. Si no hay actividad, entonces 2 segundos, luego 4, etc., con un máximo de tal vez 30 segundos entre las solicitudes. Cuando suceden las actualizaciones, reinicie el temporizador. Básicamente, espacie sus solicitudes de manera inteligente para que la GUI se vea lo más receptiva posible.
Voto por una estrategia de sondeo largo: cada cliente abre una solicitud al servidor, pero el servidor nunca rompe las conexiones y solo envía fragmentos de java-script de vez en cuando.
Las solicitudes constantes de AJAX matarían a su servidor.
EtherPad ha sido de código abierto, si está buscando un editor de texto enriquecido de colaboración en tiempo real.