FAQs - lkpworkspace/myframe GitHub Wiki

actor中使用周期性定时器会出现定时器超时与设置的超时不符合?

假设A actor中每次调用Timeout()就会向定时器线程发送一个定时器消息,在定时器超时时就会向A actor发送一个超时消息;如果B actor也向A actor发送一个文本消息,在没有判断该消息是否是超时消息时又调用一次Timeout()函数,那么就相当于又一次设置超时。解决该问题的方法就是A服务收到消息时判断是否是超时消息,如果是再调用Timeout()函数。

  • 错误示例:
void Proc(const std::shared_ptr<const Msg>& msg) override {
    /* 设置下一次超时时间 100 * 10 ms */
    Timeout("1s", 100);
    // TODO...
}
  • 正确示例:
void Proc(const std::shared_ptr<const Msg>& msg) override {
    if (msg->GetType() == "TIMER") {
        /* 设置下一次超时时间 100 * 10 ms */
        Timeout(100);
        // 处理其它的事情
        // TODO...
    }
}

actor在初始化函数中发送消息给另一个actor, 另一个actor未收到消息?

假设A actor在初始化函数中向B actor发送消息, 让我们了解一下它的处理流程:

  • myframe框架在调用A actor的初始化函数后,就会将A actor的消息分发给其他actor.

如果此时将消息分发给B actor, 但B actor未在A actor之前加载,那么A发送的消息 就会找不到对应的actor导致消息丢失. 所以建议不要再Init()函数中发送消息给其他actor

  • 关于服务加载的顺序是根据配置文件中服务配置的顺序加载的.
⚠️ **GitHub.com Fallback** ⚠️