Page History
Info |
---|
ReceiveActor은 Actor의 기본 메시지 처리기가 정의된 기본 클래스이며 대부분의 기본 메시지처리는 ReceiveActor에서 가능합니다. 액터모델의 특징 요약
ActorSystem 주요 메서드
Actor 메시지 전송 주요 메서드
|
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public class SomeMessage { public string message { set; get; } } public class MyActor : ReceiveActor { public MyActor() { Receive<string>(message => { Sender.Tell("RE:" + message); }); Receive<SomeMessage>(message => { Sender.Tell("RE:" + message.message); }); } } |
Actor는, 메시지를 송수신을 송수신 정의하는 가장작은 객체의 정의 이며, 능동적 객체라고 볼수 있다.
Actor설계시 기본적으로 다음을 고려하면 된다고려한다. 이것은 마치 특정API 설계시 하는 고민과 똑같다.
...
IF문이나 스위치문없이 생성자에서 , 처리할 패턴별로 처리기가 등록이 가능한것은 C#의 문법지원때문인데
C# 언어학적으로 파악하고자 하면 ( 템플릿 / 람다 /함수형/ 델리게이트 특성) 참조하여 더 깊은 심화 학습이 가능합니다.
어쨋든, 우리의 아주 짧은 액터 메시지 처리기 설계가 끝이 났습니다.
...
- Ask : 결과값을 기대할때 사용합니다. 비동기로 수신하며, 동기처리시 .Result를 붙입니다. ( C#의 Async 프로그래밍 )
- Tell : 결과값이 결과값이 필요 없을때 , 단지 전송만 하고 대기처리가 없습니다. 로직상 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' 란 하위 노드의 액트를 액터를 생성하고
자식액트자식액터(하위노드) 의 생성을 반환하는 메시지를 응답하는 예제입니다.
...
myactor가 어떠한 이름(myChild) 하위 노드를 만들었다면 'user/myactor/myChild' 이렇게 계층화가 됩니다.
그리고 , 액트시스템은 액터시스템은 어떠한 액터라도 선택할수 있으며
actorSystem.ActorSelection( 액터주소).어떠한액션() 이러한 접근방식으로 메시지 전송이 가능합니다.
...