Básicamente, solo estamos guardando nuestra lista en un área diferente. Observe que no tuvimos que cambiar mucho de la lógica del componente en sí. El ajuste clave fue simplemente usar el tipo compartido de Yjs en lugar del estado local. Las operaciones como agregar o eliminar todavía se sienten muy familiares, pero ahora están respaldadas por el poder colaborativo de Yjs. Esto nos prepara para extender la capacidad de nuestra aplicación para aprovechar Yjs para la sincronización y el soporte offline.
Y para eso, introducimos los proveedores de Yjs. Estas son piezas modulares que conectan tu documento Y local a varios sistemas externos para persistencia o comunicación en tiempo real. El primero que vemos para la colaboración en tiempo real es Y WebSocket o WebSocket. Estos son independientes. Para hacer que estas copias independientes se comuniquen entre sí en tiempo real, especialmente cuando queremos colaborar en vivo a través de diferentes dispositivos, usamos Y WebSocket. Un proveedor de Yjs que maneja la sincronización de actualizaciones de documentos a través de una conexión WebSocket a un servidor ligero.
Así es como nuestro archivo DS del proveedor Y en el cliente se actualiza para incluir el paquete del proveedor WebSocket. Y así de simple, como puedes ver, todo lo que estamos haciendo es importar una nueva clase, instanciarla, y eso es todo. Lo que estamos haciendo aquí es dejar que Y WebSocket maneje todos los cambios entrantes y salientes por nosotros. Cuando ocurren cambios en el documento Y de un cliente, por ejemplo, en nuestro caso, el elemento de tareas, Y WebSocket envía esas pequeñas actualizaciones incrementales al servidor WebSocket configurado. Luego, el servidor actúa como un simple mensajero, transmitiendo esas actualizaciones a todos los clientes actualmente conectados al mismo nombre de sala.
Es crucial que el servidor sea un simple relé. No realiza una resolución de conflictos compleja ni almacena la verdad definitiva. Ese trabajo pesado, la fusión y asegurar la consistencia está dentro de cada documento Y en los propios clientes. Este diseño mantiene el servidor ligero, escalable y enfocado puramente en la transmisión de datos. Ahora, para prosperar verdaderamente offline, necesitamos una forma de procesar los datos directamente en el dispositivo del usuario para que incluso si cierran su navegador o pierden la conectividad a Internet, su trabajo esté seguro e inmediatamente disponible. Ahí es donde entra en juego IndexedDB.
Yjs aprovecha un paquete llamado y-index-db-provider para guardar automáticamente todo el documento Y en un IndexedDB local. Esto significa que incluso si el usuario cierra su navegador, pierde la conexión a Internet, o reinicia su computadora, su copia local de los datos está segura e inmediatamente disponible en el momento en que reabren la aplicación. Prácticamente lo que haría el almacenamiento local en este caso, ¿verdad? Solo que un poco más poderoso porque se gestiona en instantáneas incrementales. Este es el núcleo para habilitar la capacidad de respuesta instantánea y el trabajo offline sin problemas que discutimos anteriormente. Tu aplicación ahora siempre tiene acceso a los datos independientemente de las condiciones de la red. Este diagrama aquí ilustra el flujo simplificado. Cada cliente, como puedes ver, tiene su propia aplicación impulsada por un documento Yjs local. Este documento es donde viven todos los datos.
Comments