View Single Post
Old 12-03-2017, 19:30   #1
fano
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2095
[C#] Libreria IPC basata su Message Passing

Ciao a tutti!

Noi sviluppiamo applicazioni su Architettura Distribuita e quindi spesso usiamo processi quando in un'applicazione moderna si userebbero thread... il tutto è scritto in C (), con 2 demoni che rompono le palle più che altro e i processi sono creati con la classica fork() / exec().

Il mio sogno sarebbe di passare a C# e - con la scusa - usare qualcosa di più moderno... ma il fatto che esistono più processi per fare le cose mi interessa mantenerlo sia perché ho bisogno che l'applicazione possa essere divisa su più macchine sia perché è comodo magari per il collega sviluppare una parte e farsi la sua mini "applicazione" senza quello che sto sviluppando io e che magari ancora non funziona.

Così questo sarebbe quello che mi piacerebbe avere:
  1. Lo scambio deve avvenire con dei messaggi, la libreria non dovrebbe avere alcun interesse al contenuto, ma solo trovare il processo / destinatario e inviargli il messaggio
  2. La libreria non deve imporre il suo formato di serializzazione per esempio devo poter passare da Json a MessagePack senza minimamente toccare il mio codice, ma semplicemente cambiando la configurazione. WCF quindi non va bene perché usa XML come formato di serializzazione
  3. La versione originale della libreria nel classico stile Unix anni '50 usava i socket per comunicare tra i processi, ci siamo accorti ben presto che per il nostro uso era troppo lenta la rete e così passammo alle real time queue... mantenendo la rete per il raro caso in cui il processo giri su un'altra macchina. Ecco la libreria che ciò sto cercando dovrebbe essere "furba" nello stesso modo usare il sistema di comunicazione più veloce se sono sulla stessa macchina e usare la rete solo nel caso in cui il processo sia remoto
  4. Non deve essere richiesto di fare configurazioni strane, avere server / demoni tra i piedi o altro... deve funzionare e basta!
  5. La comunicazione tra i processi deve essere quasi istantanea per intenderci > 10 ms e siamo morti
  6. Essendo in C# mi aspetto che funzioni ovunque (pure su Cosmos in futuro ovviamente )
  7. Plus che con l'attuale libreria un thread non può ricevere messaggi, in alcuni casi sarebbe utile farlo ovviamente i messaggi li potrebbe ricevere solo dal thread main o da altri thread suoi fratellini (per quanto se le queue esistono a livello di kernel e sono "file"...)
  8. Plus se quando cade la connessione di rete salva i messaggi da qualche parte per poi spararli tutti in una volta quando la connessione ritorna

Quindi una cosa del genere esiste già? O me la devo fare da solo?
__________________
Cosmos C# Open Source Managed Operating System
Cosmos Thread Ufficiale
Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat!

Ultima modifica di fano : 12-03-2017 alle 20:18.
fano è offline   Rispondi citando il messaggio o parte di esso