Page History
...
어쨋든, 우리는 아주 짧은 코드로 액터 메시지 처리기 설계가 끝이 났습니다.
액터 생성
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
protected void SomeTest1()
{
IActorRef myActor = actorSystem.ActorOf<MyActor>("myactor");
Console.WriteLine(myActor.Ask("Hello Akka").Result);
} |
Expand | ||
---|---|---|
| ||
RE:Hello AKKA |
처음에 설계한 MyActor를 myActor란 이름으로 생성하고
Heelo Akka란 메시지를 전송하여 그 결과값을 출력하는 예제입니다.
보낼수 있는 명령 Type
- Ask : 결과값을 기대할때 사용합니다. 비동기로 수신하며, 동기처리시 .Result를 붙입니다. ( C#의 Async 프로그래밍 )
- Tell : 결과값이 필요 없을때 , 단지 전송만 하고 대기처리가 없습니다.
Child 액터 생성과 액트선택
...
자식 노드 생성
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
Receive<string>(message => {
if (message == "createChild")
{
Context.ActorOf<MyActor>("myChild");
Sender.Tell("Create Child Succed:myChild");
}
else
{
Sender.Tell("RE:" + message);
}
}); |
문자열 수신부분을 수정을 하여, createChild 란 문자열을 받을시 'myChild' 란 하위 노드의 액트를 생성하고
자식액트(하위노드) 의 생성을 반환하는 메시지를 응답하는 예제입니다.
이것을 작동하는 코드는 아래와 같이 하면 되겠습니다.
자식노드를 선택하여 메시지 보내기
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
protected void SomeTest2()
{
IActorRef myActor = actorSystem.ActorOf<MyActor>("myactor");
Console.WriteLine(myActor.Ask("createChild").Result);
Console.WriteLine(actorSystem.ActorSelection("/user/myactor").Ask("Hello Akka1").Result);
Console.WriteLine( actorSystem.ActorSelection("/user/myactor/myChild").Ask("Hello Akka2").Result );
} |
Expand | ||
---|---|---|
| ||
Create Child Succed:myChild |
사용자가 만든 액터 로트의 최상위는 'user' 이며 만든 계층에따라 하위 뎁스로 가게 됩니다.
actorSystem에 의해 어떠한 이름(myactor))으로 만들어졌다면 'user/myactor'
myactor가 어떠한 이름(myChild) 하위 노드를 만들었다면 'user/myactor/myChild' 이렇게 계층화가 됩니다.
그리고 actorSystem.ActorSelection( 액터주소).어떠한액션() 을 할수가 있습니다.