/simple-random-chat

랜덤채팅 토이프로젝트 서버

Primary LanguageScala

Simple Random Chat

Tech: Scala(2.13.8), Akka Actor, Akka Stream, Akka Http

To run: sbt run

Architecture

클라이언트는 User 액터와 1:1로 연결되어 웹소켓을 통해 통신한다.

슬라이드1

UserManagerUser의 부모 액터로, User의 생성 및 생명주기를 관리한다.

슬라이드2

새로 접속했거나 채팅이 종료된 클라이언트의 User 액터는 MatchRouter 액터에게, 자신을 대기열에 추가하라는 요청(Waiting)을 보낸다.

MatchRouter는 라운드 로빈(Round Robin) 방식으로 두 개의 MatchManager 액터 중 하나에게 메세지를 라우팅한다.

MatchManager 액터에는 두 가지의 상태가 있다.

  • noWaiting: 대기중인 User가 없다. Waiting 메세지를 받으면 withWaiting상태가 된다.
  • withWaiting(User): 대기중인 User가 있다.
    • Waiting 메세지를 받은 경우, ChatManager 액터를 생성하여, 대기중인 User와 새 User를 매칭하고 withWaiting 상태가 된다.
    • 대기중이던 User 액터가 종료(Terminated)할 경우 withWaiting 상태가 된다.

슬라이드3

ChatManager 액터는 매칭된 두 User 액터간의 메세지 전달 및 채팅의 종료시점을 관리한다.

슬라이드4