Libreria di attori / framework per C ++ [chiuso]

5

Nel progetto C ++ su cui sto lavorando, abbiamo un'applicazione composta da diversi processi distribuiti su macchine diverse. Questa rete di i processi sono dinamici poiché i processi (client o servizi in background) può essere avviato e terminato durante la vita dell'applicazione.

Abbiamo già un modulo che consente di trasportare dati arbitrari la rete tramite RPC e la stiamo usando per scambiare informazioni (come informazioni sullo stato, informazioni sullo stato di avanzamento, codici di errore, ecc.) tra i processi. Vorremmo avere uno strato più astratto per gestire la comunicazione asincrona (al momento, l'RPC viene eseguito in modo sincrono) e per consentire l'avvio e la chiusura dei processi dinamicamente e ancora si trovano l'un l'altro.

Recentemente abbiamo cercato una soluzione e pensiamo di poter usare qualcosa come attori e attori remoti (vedi ad esempio questo tutorial ). Un'altra lingua che usa il modello dell'attore è stata più lunga di Scala è Erlang (vedi anche questa domanda ).

Gli attori sono oggetti che hanno un comportamento e una casella di posta, non condividono dati. Gli attori vengono eseguiti contemporaneamente e comunicano attraverso asincroni scambio di messaggi. Come parte del loro comportamento, gli attori possono creare altri attori. I messaggi sono anche rappresentati come oggetti.

Il caso più semplice è che gli attori vivano nello stesso processo. In questo caso possono rivolgersi l'un l'altro usando una maniglia (riferimento, puntatore, identificatore univoco). L'implementazione dell'attore nasconde i thread sottostanti e ogni altro dettaglio. Quando gli attori vivono in diversi processi (e possibilmente in modo diverso) macchine in una rete) sono identificati da un indirizzo IP, una porta e un nome. In questo caso parliamo di attori remoti (vedi il breve esempio in cima a questa pagina ) .

Nel nostro caso, avremmo un attore per ogni processo, avendo cura di tutta la comunicazione, cioè abbiamo bisogno di qualche tipo di attori remoti.

On wikipedia Ho trovato alcuni collegamenti alle librerie di attori per C ++ e Ho iniziato a cercare Theron . Theron sembra molto ben scritto e la libreria documentata ma, a mio avviso, non supporta attori remoti: tutti gli attori devono vivere nello stesso processo. È possibile per creare diversi pool di attori ( framework ), ma tutti questi pool devono vivere nello stesso processo.

Quindi volevo chiedere se qualcuno conosce altre librerie C ++ che supportano il concetto di attore remoto come abbozzato sopra.

Modifica

Questa domanda è stata modificata rispetto alla domanda originale, che segue indicazioni da discussione dei programmatori-meta .

Aggiorna

Altri framework che ho visto sono libcppa (dovrebbe supportare attori remoti, ma è ancora in fase di sviluppo, attualmente versione 0.1), actor-cpp (anch'esso in fase di sviluppo) e libactor , che è in C (il sito web dice che "è utilizzabile, anche se potrebbe non essere pronto per la produzione").

    
posta Giorgio 05.04.2012 - 17:35
fonte

3 risposte

7

A partire dalla versione 5, Theron supporta gli attori remoti. Il supporto è ancora piuttosto preliminare e ci sono alcune limitazioni, in particolare la serializzazione dei messaggi è attualmente solo una copia bit a bit (nella versione 5.0 e a ottobre 2012). Ma è un inizio, e ho intenzione di svilupparlo ulteriormente.

link

    
risposta data 11.10.2012 - 00:56
fonte
2

L'ultima comunicazione Microsoft "client-server basata su cloud nel codice nativo utilizzando un moderno design API C ++ asincrono", Casablanca è progettato per questo.

Actors

Another aspect of Casablanca is its implementation of the actor programming model, which has proven itself useful in building reliable and scalable systems. The C++ implementation stays close to the Erlang model; it’s obviously difficult to exactly mimic the model of a pure functional language in library built with an imperative language that has pointers, but we’ve gotten pretty close.

È molto nuovo, Microsoft ha solo recentemente immaginato che C ++ sia adatto per sistemi cloud e scalabili, ma stanno ascoltando feedback - mi hanno invitato a parlare con loro per un'ora su di esso, vai a scaricarlo selezionare " benvenuto feedback "e ti invieranno un'e-mail. Anche se è nuovo, questo non significa molto: MS è impegnata in Azure come il prossimo spin-money, quindi non sta andando via.

    
risposta data 16.06.2012 - 15:09
fonte
0

Forse il framework di oggetti attivi (attori) QP / C ++ si adatterebbe al conto? QP / C ++ è stato progettato principalmente per sistemi embedded in tempo reale, ma funziona molto bene su Linux (con thread P) e Windows (thread Win32).

QP / C ++ è un framework maturo e open source, che ora festeggia 10 anni sul mercato. È molto leggero per progettazione e non supporta oggetti attivi remoti, ma questa funzionalità può essere aggiunta per mezzo del modello di progettazione "Proxy remoto". In questo modo, puoi riutilizzare il tuo protocollo di comunicazione esistente sulla / e rete / i. Il vantaggio dell'utilizzo di Proxy è che gli oggetti attivi non sapranno che comunicano in remoto, quindi è possibile partizionare il sistema come desiderato senza modificare gli oggetti attivi. Tutto quello che devi fare è sviluppare i tuoi Proxies.

Il framework QP fornisce anche un strong supporto per macchine a stati gerarchici (UML Statecharts) per modellare il comportamento degli oggetti attivi event-driven. Il framework fornisce un modo semplice per codificare manualmente gli HSM in un codice altamente leggibile, ma è anche possibile utilizzare lo strumento di modellazione QM gratuito per disegnare statecharts e generare automaticamente il codice QP. Per ulteriori informazioni, visita state-machine.com .

    
risposta data 19.09.2012 - 00:45
fonte

Leggi altre domande sui tag