Attendi il / i file / i in una directory remota da creare, quindi trasferisci i file immediatamente al computer locale

1

Mi sto chiedendo quale sarebbe la migliore pratica per il seguente compito:

Inizio un programma su un nodo remoto, che genererà successivamente nuovi file in una cartella accessibile pubblicamente. Ogni volta che viene creato un nuovo file sul nodo remoto, ho bisogno di trasferire questo file su un altro nodo, diciamo subito nodo / client locale.

Nota: i nodi sono due normali computer desktop Windows 10 collegati da una LAN nella nostra sala laboratorio.

Potrei monitorare periodicamente la directory remota, ma questo non avrebbe trasferito il file dati non appena disponibili. Mi chiedo solo se esiste già un modello di principio o di design che potrei applicare o se devo impostare alcune comunicazioni client / server. Penso che queste domande non siano linguaggi di programmazione, tuttavia sto usando C #.

    
posta Stephan M. G. 17.08.2018 - 16:17
fonte

5 risposte

0

Ci sono essenzialmente due approcci che potresti usare qui; il primo è semplicemente quello di essere il nodo remoto che deve avviare il trasferimento poiché quel nodo saprà esattamente quando il file è pronto per essere inviato.

La seconda opzione è un follow-up del primo essenzialmente dove il nodo locale sarebbe connesso al nodo remtoe e attende un messaggio che il nodo è fatto. In un certo senso è uguale alla prima opzione, ma il nodo locale sarebbe quello che esegue lo spostamento del file.

    
risposta data 17.08.2018 - 16:37
fonte
0

Ho dovuto fare una cosa simile, attivata quando un file arrivava in una directory FTP.

È stato qualche tempo fa, ma credo che abbiamo usato incron

link

Penso che .net abbia System.IO.FileSystemWatcher che può essere utilizzato per un effetto simile su PC Windows.

link

    
risposta data 17.08.2018 - 17:30
fonte
0

Devi sapere non solo che un file esiste ma che è completo e pronto per essere copiato. Altrimenti, non ci sarebbe il rischio di copiare su un file incompleto?

Potresti includere l'indicazione di completezza in ogni file, come un marcatore di fine file. (Ma cosa succede se il creatore del file muore con un file incompleto?)

Potresti usare l'esistenza di un altro file come marcatore finale. Quando i file vengono creati, il file marker viene toccato, aggiornando il tempo di modifica. Il tuo sistema locale sarebbe quindi libero di copiare tutti i file precedenti al file degli indicatori finali.

Potresti utilizzare la segnalazione di qualche altro modulo dal sistema remoto al sistema locale per richiedere al sistema locale di venire e ottenere un file completato.

    
risposta data 16.10.2018 - 19:40
fonte
0

Se sei in grado di modificare il programma che verrà eseguito sui nodi, puoi cambiarlo in POST i contenuti in un server HTTP nella destinazione.

Se non si è in grado di modificare il programma, ma è in grado di reindirizzare il proprio output su stdout, è possibile scrivere un programma wrapper che lo avvia con un flusso stdout reindirizzato e inoltrarlo alla destinazione (di nuovo, HTTP POST).

    
risposta data 18.10.2018 - 15:23
fonte
0

Personalmente ritengo che il principale principio di ingegneria del software che entrerebbe in gioco per quello che hai descritto non è reinventare la ruota. Non conosco le specifiche che potrebbero entrare in gioco, ma lo considererei in termini di quale sia la quantità minima di logica che è necessario inserire per fare in modo che funzioni.

Ad esempio, secondo me se finisci di scrivere codice per trasferire file tra questi computer, stai sbagliando, perché puoi facilmente configurare la condivisione delle cartelle di rete tra due PC Windows 10. Quindi al massimo sembra che sia necessario scrivere codice per monitorare le modifiche e fare la copia locale dei file condivisi sull'unità locale. A seconda di cosa si sta facendo esattamente, si potrebbe semplicemente scrivere un programma che aggiorna la cartella condivisa ogni pochi secondi e utilizza i normali comandi di copia di Windows per copiare localmente il contenuto del file. Se si arriva a questo punto, probabilmente c'è un software standard che lo fa automaticamente, anche se non conosco quelli ovvi che sono in tempo reale. Se cerchi "sincronizzazione cartella in tempo reale", ci sono sicuramente opzioni disponibili.

    
risposta data 18.10.2018 - 16:33
fonte

Leggi altre domande sui tag