标签: c++-actor-framework

libcppa actor,它在套接字连接上产生actor

我正在寻找一个libcppa actor的示例代码,该代码侦听端口以获得新连接,然后生成新的actor以处理新连接.

任何帮助,将不胜感激.

谢谢

c++ sockets actor c++-actor-framework

5
推荐指数
1
解决办法
528
查看次数

我可以在C++ Actor Framework中使用C++ 11智能指针作为消息返回类型吗?

当我使用unique_ptr作为返回类型时,我收到编译器错误C2280:

'caf::detail::tuple_vals<std::unique_ptr<A,std::default_delete<_Ty>>>::tuple_vals(const caf::detail::tuple_vals<std::unique_ptr<_Ty,std::default_delete<_Ty>>> &)': attempting to reference a deleted function  include\caf\detail\tuple_vals.hpp   102
Run Code Online (Sandbox Code Playgroud)

下面是一些示例代码,用于说明问题(从C++ Actor Framework示例中修改):

#include <iostream>
#include "caf/all.hpp"

using namespace caf;
using namespace std;

class A
{
public:
    int a;

    A(int a)
    {
        this->a = a;
    }
};

using a_type = typed_actor<replies_to<int>::with<unique_ptr<A>>>;

a_type::behavior_type a_behavior(a_type::pointer self)
{
    return
    {
        [self](const int& a) -> unique_ptr<A>
        {
            return make_unique<A>(5);
        }
    };
}

void tester(event_based_actor* self, const a_type& testee)
{
    self->link_to(testee);
    // will be invoked if we receive an unexpected response message
    self->on_sync_failure( …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ c++11 c++-actor-framework

5
推荐指数
1
解决办法
394
查看次数

在C++ Actors Framework中在类型化actor之间转发消息的最佳实践?

我正试图将一些作品从一个打字的演员交给另一个演员.CAF用户手册表明可以使用该forward_to方法完成此操作.该方法看起来只适用于明确属于该event_based_actor类型的actor .但是,forward_to似乎是方法的一个薄包装器forward_current_message,它是为该local_actor类型的所有actor定义的.因此,我认为forward_current_message直接打电话是可以的吗?

此外,为了使消息转发与类型的actor一起工作,我仍然必须返回来自中间actor的响应.那个演员的反应似乎被忽略了,这很好,但我做错了吗?或者是否真的有必要支付构建不会被使用的响应的(通常是最小的)成本?

这是一些工作示例代码,演示了我尝试使用类型化actor进行消息转发:

#include <iostream>
#include "caf/all.hpp"

using namespace caf;
using namespace std;

using a_type = typed_actor<replies_to<int>::with<bool>>;
using b_type = typed_actor<replies_to<int>::with<bool>>;

actor worker()
{
    return spawn(
        [](event_based_actor *self) -> behavior
        {
            return
            {
                [self](int index)
                {
                    aout(self) << "Worker: " << index << endl;
                    return index;
                }
            };
        });
}

b_type::behavior_type bBehavior(b_type::pointer self)
{
    return
    {
        [self](int value)
        {
            // Create blocking actor
            scoped_actor blockingActor;

            // Spawn …
Run Code Online (Sandbox Code Playgroud)

c++ c++-actor-framework

5
推荐指数
1
解决办法
330
查看次数

了解stateful_actor

我已经在examples/curl/curl_fuse.cpplibcaf_core/test/stateful_actor.cpp中读到了stateful_actor的一些用法.它似乎stateful_actor<State>可以通过声明字段来绑定某些演员的状态State struct.这非常有用.

我们可以将状态声明为字段class-based actor以获得相同的效果吗?或者在stateful_actor(例如线程安全访问)中有一些特殊处理?

以下示例中的actor是否提供相同的功能?

/* Class based actor */
struct ClassCounter : caf::event_based_actor
{
    caf::behavior make_behavior() override { 
        return { 
            [=](inc_atom){ i += 1; }
          , [=](ret_atom){ return i; }
        };
    }

    const char* name() const override { return "I am class-based"; }
    int i = 0;
};

/* Stateful actor */
struct CounterState
{
    caf::local_actor* self;
    int i = 0;
    const char* name = "I am …
Run Code Online (Sandbox Code Playgroud)

c++ c++-actor-framework

5
推荐指数
1
解决办法
280
查看次数

如何"发布"CAF中的大量演员?

我刚刚了解了CAF,即C++ Actor Framework.

让我感到惊讶的一件事是,通过网络提供演员的方法是将其"发布"特定的TCP端口.

这基本上意味着您可以发布的actor的数量受到您拥有的端口数量的限制(64k).由于你需要一个端口来发布一个actor和一个端口来访问一个远程actor,我假设两个进程每个最多可以共享大约32k个actor,而它们每个可能在商品服务器上拥有一百万个actor. .如果集群有10个节点,情况会更糟.

为了使发布可扩展,每个进程应该只需要为一个系统中的每个actor 打开1个端口,并打开1个连接到他们想要访问的每个actor系统.

有没有办法发布一个actor作为actor系统中所有actor 的代理(最好没有任何重大的性能损失)?

c++ distributed-computing actor c++-actor-framework

5
推荐指数
1
解决办法
425
查看次数

如果发送者演员已经离开,会有什么反应?

请考虑以下示例.A hello_world actor发送一个"hello"字符串mirror actor,然后立即终止.world从...返回的响应会发生什么mirror actor?忽略?留在hello_world actor邮箱?镜子可以知道它的反应丢失了吗?

behavior mirror(event_based_actor* self)
{
    return { [=](std::string s){ return "world"; } };
}
void hello_world(event_based_actor* self, const actor& theMirror)
{
    self->send(theMirror, "hello");
}
Run Code Online (Sandbox Code Playgroud)

c++ c++-actor-framework

4
推荐指数
1
解决办法
122
查看次数