Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Говнакка на ноде

Это всё, что вам нужно знать об акке:
class Actor {
    constructor() {
        this.mailbox = [];
        this.inProgress = false;
    }
    PipeTo(promise, actor) {
        promise.then((msg) => actor.Tell(this, promise));
    }
    Tell(sender, msg) {
        console.log('%s -> %s', sender.constructor.name, this.constructor.name);
        this.mailbox.push({ sender, msg });
        while (!this.inProgress && this.mailbox.length > 0) {
            this.inProgress = true;
            const mb = this.mailbox;
            this.mailbox = [];
            for (const { msg, sender } of mb) {
                this.onReceive(sender, msg);
            }
            this.inProgress = false;
        }
    }
    onReceive(sender, msg) {
    }
}
Легко видеть, что это ни что иное, как эвентлуп. И эвентлуп с весьма дебильным интерфейсом а ля селект, Perl POE по сравнению с этим просто шедевр. Ну то есть вот когда мы не в inProgress - то мы как бы заблокированы в селекте. А когда onReceive вызывают с сообщением - это нас вызвали с одним из хендлов в селекте.

Короче, идея написать над этим селектом свою ноду второго порядка, с промисами и шлюхами.
Tags: fp, programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 22 comments