Actor library / framework para C ++ [closed]

5

No projeto C ++ em que estou trabalhando, temos um aplicativo que consiste em vários processos implantados em diferentes máquinas. Esta rede de processos é dinâmico desde processos (clientes ou serviços de segundo plano) pode ser iniciado e finalizado durante o tempo de vida da aplicação.

Já temos um módulo que permite transportar dados arbitrários sobre a rede através de RPC, e estamos usando para trocar informações (como informações de status, informações de progresso, códigos de erro, etc) entre os processos. Nós gostaríamos de ter uma camada mais abstrata para lidar com comunicação assíncrona (atualmente, o RPC é executado sincronicamente) e permitir que os processos sejam iniciados e terminados dinamicamente e ainda encontrar um ao outro.

Recentemente, procuramos uma solução e achamos que podemos usar algo como Scala atores e atores remotos (veja, por exemplo, este tutorial ). Outra linguagem usando o modelo de ator que já existe há mais Scala é Erlang (veja também esta questão ).

Atores são objetos que possuem um comportamento e uma caixa de correio, não compartilham dados. Os atores são executados simultaneamente e se comunicam por meio de troca de mensagens. Como parte de seu comportamento, os atores podem criar outros atores. As mensagens também são representadas como objetos.

O caso mais simples é que os atores vivam no mesmo processo. Neste caso, eles podem abordar um ao outro usando um identificador (referência, ponteiro, identificador exclusivo). A implementação do ator esconde os tópicos subjacentes e quaisquer outros detalhes. Quando os atores vivem em diferentes processos (e possivelmente em diferentes máquinas em uma rede) eles são identificados por um endereço IP, uma porta e um nome. Neste caso, falamos de atores remotos (veja o pequeno exemplo no topo da esta página ) .

No nosso caso, teríamos um ator em cada processo, cuidando de toda a comunicação, ou seja, precisamos de algum tipo de atores remotos.

Em wikipedia eu encontrei alguns links para bibliotecas de ator para C ++ e Eu comecei a olhar para Theron . Theron parece muito bem escrito e documentada biblioteca, mas, no meu entender, não suporta atores remotos: todos os atores devem viver dentro do mesmo processo. É possível para criar vários pools de atores ( frameworks ), mas todos esses pools devem viver no mesmo processo.

Então, eu queria perguntar se alguém conhece outras bibliotecas C ++ que suportam o conceito de ator remoto como esboçado acima.

EDITAR

Esta questão foi editada com a pergunta original, a seguir indicações da discussão entre programadores e meta .

UPDATE

Outras estruturas que eu olhei são libcppa (deve apoiar atores remotos, mas ainda está em desenvolvimento, atualmente a versão 0.1), actor-cpp (também em desenvolvimento) e libactor , que é em C (o site diz que "é utilizável, embora possa não estar pronto para produção").

    
por Giorgio 05.04.2012 / 17:35
fonte

3 respostas

7

A partir da versão 5, o Theron suporta atores remotos. O suporte ainda é bastante preliminar e há algumas limitações, notavelmente a serialização de mensagens é atualmente apenas uma cópia bitwise (na versão 5.0 e em outubro de 2012). Mas é um começo e pretendo desenvolvê-lo ainda mais.

link

    
por 11.10.2012 / 00:56
fonte
2

A mais recente "comunicação cliente-servidor baseada em nuvem da Microsoft em código nativo usando um design moderno de API C ++ assíncrona", Casablanca é projetado para isso.

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.

É muito recente, a Microsoft só recentemente descobriu que o C ++ é um bom ajuste para sistemas em nuvem e escaláveis, mas eles estão ouvindo o feedback - eles me convidaram para conversar com eles por uma hora sobre isso, baixe e marque " welcome feedback "caixa e eles vão lhe enviar um email. Embora seja novo, isso não significa muito - a MS está comprometida com o Azure como seu próximo grande fornecedor de dinheiro, então isso não vai desaparecer.

    
por 16.06.2012 / 15:09
fonte
0

Talvez a estrutura de objeto ativo (ator) QP / C ++ se encaixe na conta? O QP / C ++ foi projetado principalmente para sistemas incorporados em tempo real, mas funciona muito bem no Linux (com threads P) e no Windows (threads Win32).

O QP / C ++ é uma estrutura madura e de código aberto, que agora celebra 10 anos no mercado. É muito leve por design e não suporta objetos ativos remotos, mas esse recurso pode ser adicionado por meio do padrão de design "Proxy Remoto". Dessa forma, você pode reutilizar seu protocolo de comunicação existente pela (s) rede (s). A vantagem de usar Proxies é que os objetos ativos não saberão que eles se comunicam remotamente, para que você possa particionar seu sistema como quiser sem alterar objetos ativos. Tudo o que você precisa fazer é desenvolver seus proxies.

A estrutura QP também fornece strong suporte para máquinas de estado hierárquicas (UTIL Statecharts) para modelar o comportamento dos objetos ativos orientados a eventos. A estrutura fornece uma maneira fácil de codificar HSMs manualmente em código altamente legível, mas você também pode usar a ferramenta de modelagem QM gratuita para desenhar gráficos de estados e gerar o código QP automaticamente. Por favor, visite state-machine.com para mais informações.

    
por 19.09.2012 / 00:45
fonte