scala / 스칼라 채팅 서버 / 아카 챗 서버 / 클러스터 / 대규모 / 이벤트 actor / react programming
akka 를 이용한 chatserver
ref. 1에서 간략한 chat server 의 내용이 나온다.
간략설명
- 간략한 sequence diagram : svg link
- source code
- Main 에서 ChatRoom 에게 session 을 요청하면
- ChatRomm.chatroom 이 session Actor 를 만들고
- 이 session ActorRef 를 Gabbler 에게 준다.
- Gabbler 는 자신이 보내고 싶은 message 를 이 session 으로 전달한다.
- ChatRoom.session 이 message 를 받고, 이것을 다시 ChatRoom.chatroom 으로 보낸다.
- ChatRoom.chatroom 은 message 를 받고, 그것을 자신의 모든 client session 에게 보낸다.(NotifyClientMessage)
- 그러면 session 이 이 것을 Gabbler 에게 다시 보낸다.
Cluster
- Get started with Lightbend's technologies - Cluster Scala: cluster 에 대한 예제, README.md 를 읽으면, 이해에 도움이 된다.
Simple App
- simple.App 에 대한 sequence diagram
App 에서 RootBehavior 를 호출하는데, 이때 ClusterListener Actor (ClusterListener behavior 를 갖는 Actor)를 생성하게 된다. (context.spawn)
ClusterListener Actor 는 Cluster 가 보내는 MemberChange, ReachabilityEvent event 를 Cluster 에게서 받아서 처리하는 녀석들을 등록해 놓는다.(memberEventAdapter, reachabilityAdapter)
- ClusterEvent: event bus 에 publish 되는 Domain Events 들, 이것들을 subscribe 할 때 Cluster(system).subscribe(actorRef, classOf[ClusterDomainEvent]) 를 이용한다.
Cluster(ctx.system).subscriptions 는 cluster state 가 변할 때의 message 를 받아서 처리하는 Actor 이다.
transformation App
- transformation App에 대한 backend worker squence Diagram
- Receptionist 를 사용하는 예제, Receptionist 는 service registry 이다.
- ActorRefs 는 ServiceKey를 이용해서 Receptionist 에 등록된다.
- backend worker
- backend worker sequence Diagram
- backend worker 는 transformation job 을 수행한다.(Behaviors.receiveMessage에서 TransformText 를 처리)
- backend worker 가 처음시작할 때 receptionist 에 등록을 하는데, 이렇게 하므로써 등록한 ServiceKey 로 이 backend worker node 를 찾을 수 있다. cluster 내에서. 여기서는 frontend 가 backend worker node 를 찾는데 이용된다.
- Frontend
- frontend worker sequence diagram
- frontend 는 available worker 들을 추적하면서, user 의 행동을 simulate 해준다.
- WorkerServiceKey 를 가지고 Receptionist 를 구독(subscribe)을 한다. available worker 들이 뭔가 변하는 것에 대한 update 를 받기 위해서
댓글 없음:
댓글 쓰기