Phluxor has two contexts,
Phluxor\ActorSystem\ActorContext and Phluxor\ActorSystem\RootContext.
These two contexts implement common features such as Spawner, Stopper, Infomation, and Sender.
In addition, ActorContext implements additional features.
Phluxor\ActorSystem\ActorContext and Phluxor\ActorSystem\RootContext have a spawn method.
Spawner is a feature that creates a new actor from the Phluxor\ActorSystem\Props object.
The Props object is a configuration object for creating actors.
<?php
use Phluxor\ActorSystem;
use Phluxor\ActorSystem\Props;
$system = ActorSystem::create();
$spawned = $system->root()->spawn(
Props::fromProducer(
fn() => new YourActor()
)
);
see also Props - what are props?
Phluxor\ActorSystem\ActorContext and Phluxor\ActorSystem\RootContext have a stop method.
A feature that allows you to stop an actor immediately or instruct it to stop after processing the current mailbox message.
stop and poison have several methods,
but these methods require a Phluxor\ActorSystem\Ref object as an argument.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
public function receive(ContextInterface $context): void
{
$msg = $context->message();
$context->stop($context->sender());
$context->stop($context->self());
$context->stop(new Ref(new ActorSystem\ProtoBuf\Pid([
'id' => 'actor name',
])));
}
}
The info is not a method, but a feature that provides information about the actor.
Phluxor\ActorSystem\ActorContext and Phluxor\ActorSystem\RootContext have information features.
Context information can be obtained,
such as the parent actor of the current actor,
the Phluxor\ActorSystem\Ref of the current actor,
the Phluxor\ActorSystem\Ref of the message sender actor,
and the Phluxor\ActorSystem where the actor exists.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
public function receive(ContextInterface $context): void
{
$msg = $context->message(); // get message
$context->sender(); // get sender Ref
$context->self(); // get self Ref
$contex->parent(); // get parent Ref
$context->actorSystem(); // get actor system
$context->logger(); // get logger
// etc...
}
}
Phluxor\ActorSystem\ActorContext and Phluxor\ActorSystem\RootContext have a sender method.
The send method sends a fire-and-forget style message,
and the request method provides the ability to asynchronously request a response from the destination actor.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
// implement receive method
public function receive(ContextInterface $context): void
{
// example - make a actor reference
$pid = new Ref(new Pid([
'id' => 'otherActor',
]));
// Of course,
// you can also use the spawn method to create an actor reference.
// fire-and-forget style message
$context->send($pid, new YourMessage('hello'));
// request style message
$context->request($pid, new YourMessage('hello'));
// future style message
$context->requestFuture($pid, new YourMessage('hello'), 1);
}
}
only Phluxor\ActorSystem\ActorContext.
The receive method is a feature that provides the ability to receive a message wrapped in a Phluxor\ActorSystem\Message\MessageEnvelope.
<?php
use Phluxor\ActorSystem\Context\ContextInterface;
use Phluxor\ActorSystem\Message\ActorInterface;
use Phluxor\ActorSystem\ProtoBuf\Pid
use Phluxor\ActorSystem\Ref;
class YourActor implements ActorInterface
{
// implement receive method
public function receive(ContextInterface $context): void
{
$context->receive($envelope);
}
}
only Phluxor\ActorSystem\ActorContext.
Supervision provides methods for controlling the lifecycle of child actors under supervision of the current actor
and the ability to escalate failures up to the next actor in a supervision hierarchy.