2010-07-07 12 views
5

Tengo una aplicación de servidor que ofrece datos a varios clientes a través de la red. Puede imaginar los datos como una enorme lista de cadenas. Los datos en el servidor pueden cambiar y deben sincronizarse en todos los clientes.¿Hay un patrón para sincronizar las listas de datos en la red?

Actualmente estoy usando este enfoque: en la conexión inicial, una aplicación cliente solicita todos los datos actuales (que pueden ser muchos bytes). Luego, se suscribe a actualizaciones (adiciones, cambios y eliminaciones) de cualquier información.

Esto funciona bien a menos que se cambien los datos en el servidor entre el envío de la lista de datos inicial y la aplicación que se suscribe a cambios; en ese caso, el cliente pierde algunas actualizaciones y funciona sin saberlo.

Creo que este es un escenario muy común, por lo que debe haber un patrón que resuelva el problema. Estoy usando C# 4 y WCF, pero el patrón debería ser independiente del idioma, creo.

Respuesta

0

que no tienen experiencia haciendo esto, pero ...

Si cada 'conexión inicial' contiene una 'marca de tiempo', y cuando se suscribe, Está abonado 'ya marca de tiempo de conexión inicial', entonces el servidor podría incluir todos cambios desde esa marca de tiempo, ¿sí?

La clave es incluir alguna noción canónica de tiempo de servidor que tanto el cliente como el servidor estén de acuerdo.

p. Ej. en lugar de

void Connect() 
Subscribe() 

tiene

Timestamp Connect() 
Subscribe(timestamp) 
0

me acaba de añadir otro mensaje que envía una actualización completa para el cliente inmediatamente después de la solicitud Subscribe.

Como alternativa, el cliente podría suponer inicialmente que la lista está vacía y el Servidor envía mensajes para reconstruir la lista completa en el Cliente al empaquetarlos en varios mensajes incrementales de "adición".

2

¿Has echado un vistazo a Synchronization Framework de Microsoft para .Net. Le da un control más preciso sobre lo que se sincroniza y cómo. WCF es totalmente compatible. Admite actualizaciones incrementales y cambios de sincronización en el servidor.

La API es bastante grande y abarca más que solo la Sincronización de bases de datos, pero hay muchos artículos por ahí. Esto debería empezar:

Introduction to Sync Framework Database Synchronization

Synchronizing Databases

Cuestiones relacionadas