Pregunta

Tengo una aplicación Delphi 2006 que recoge los datos y lo muestra como un resumen de muchos canales, un canal por fila en un TDrawGrid. Tengo la misma aplicación que se ejecuta en varios otros ordenadores de la red, pero estos otros de PC son esclavos - que no se reúnen los datos sino que simplemente proporcionan una pantalla remota del resumen

.

En la actualidad, los esclavos solo muestran una mímica de la pantalla resumen en el maestro, y esto se lleva a cabo a través de emisiones por medio de procesadores de mensajes desde el maestro.

Quiero aplicar esto de una manera diferente, para reducir la carga en el maestro, y proporcionar a los esclavos con un poco más de flexibilidad e independencia de cómo se interpretan los datos. Además, estoy teniendo problemas con el procesador de mensajes de difusión de los datos a través de subredes.

¿Puedo utilizar un esquema de memoria compartida para poner los datos a un archivo asignado en memoria donde los esclavos pueden tener acceso desde cualquier lugar (a través de Internet, incluso)? Estamos hablando de un tamaño de memoria de 100K bytes máx, digamos, actualizado por el maestro en alrededor de una vez por segundo, probablemente en un hilo, para mantener la tarea de primer plano maestro de respuesta.

¿Fue útil?

Solución

La forma más sencilla es usando un archivo en un recurso compartido de que el maestro escribe a los esclavos y de sólo lectura. Algún tipo de sincronización puede ser necesario, si se quiere evitar que "las lecturas sucias". Por otro lado, puede que no importa, dependiendo del tipo de datos que desea que se vea.

El uso de un simple archivo tiene la ventaja de que no requiere ningún software adicional (por ejemplo, un servidor de daetabase o algún middleware) siguiendo el principio KISS. Pero, por supuesto, está lejos de ser atractivo ;-) y no utiliza la tecnología de palabra de moda correcta.

Otros consejos

La memoria compartida no funcionará sobre la Web (a menos que corra VPN) y no funciona bien en la red en general (puntos de vista pueden ser desincronizado y no se puede sincronizarlos a través de la red).

Me puede ver varias soluciones a su tarea:

Opción 1. middleware orientado a mensajes Uso (MOM), tales como MSMQ, kbmMW, nuestra MsgConnect a las notificaciones de difusión que incluyen sólo los cambios en sus datos. De esta manera no necesitará los clientes para sondear el servidor, además de instantánea de datos. Todas las soluciones de MOM utilizan conexiones TCP para las operaciones y esto es más fiable que los procesadores de mensajes.

Opción 2. Uso algunos DBMS cliente-servidor, probablemente, la que soporta las notificaciones a los clientes (no soy un experto en DBMS, así que no puedo decir los nombres).

Se podría utilizar una base de datos tales como DBISAM, pájaro de fuego, etc .. Con DBISAM, he usado un truco de leer los primeros 8 bytes del archivo de base de datos que parece ser una cabecera. Si cambia, sé que los datos en la tabla ha cambiado, de lo contrario no lo ha hecho. Usted puede utilizar esto en el cliente si se utiliza un bucle de sondeo, o si desea seguir utilizando los procesadores de mensajes como un método de notificación. es decir, que consulte el archivo cada 10 segundos o después de la notificación procesador de mensajes, lo que ocurra primero.

¿Qué hay de malo en usar TCP / IP? Puede usar Indy (barcos con Delphi ya) o ICS tener su principal (maestro) aplicación responden a las solicitudes de propiedad intelectual (por ejemplo., HTTP o ICMP o lo que se adapte a sus necesidades de datos) con un hilo o dos, y tienen el "esclavo" aplicaciones simplemente solicitar los datos a través de la dirección IP del maestro en un puerto específico. Esto funcionaría en una intranet oa través de Internet de forma transparente.

Utilizamos MSMQ algo similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top