[컴] akka 를 이용한 chat server

 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

Simple App

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

  • 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 를 받기 위해서

 

댓글 없음:

댓글 쓰기