Actors model

import Actor from "actor-model";

const counter = {
  init() {
    return { count: 0 };
  },

  incrementBy(state, { number }) {
    let count = state.count + number;
    return { count };
  },

  logTotal(state) {
    console.log(state.count);
  }
};

const address = Actor.start(counter);
Actor.send(address, ["logTotal"]); // => { count: 0 }
Actor.send(address, ["incrementBy", { number: 2 }]);
Actor.send(address, ["logTotal"]); // => { count: 2 }
const mailbox = new EventEmitter();

const Actor = {
  start() {
    const address = Symbol();

    // Use the address as the event name
    mailbox.on(address, function() {});

    return address;
  }
};
import EventEmitter from "events";

const mailbox = new EventEmitter();

const Actor = {
  start(behavior) {
    const address = Symbol();
    let state = typeof behavior.init === "function" ? behavior.init() : {};

    mailbox.on(address, function([method, message]) {
      state = behavior[method](state, message) || state;
    });

    return address;
  },

  send(target, message) {
    mailbox.emit(target, message);
  }
};

export default Actor;

Akka

Actors model

By Vladimir

Actors model

  • 63