Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web Socket 도입 #52

Open
JKjiwon opened this issue Jun 20, 2023 · 0 comments
Open

Web Socket 도입 #52

JKjiwon opened this issue Jun 20, 2023 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@JKjiwon
Copy link
Collaborator

JKjiwon commented Jun 20, 2023

1. 도입 이유

기존 프로세스

wait_queue_process

  • 대기열에 진입 한 후 대기열 조회를 위해서 Polling을 해야한다.
    • HTTP Connection을 맺고 끊는데 네트워크 오버헤드가 든다.
  • 대기열 조회, 이탈의 제어가 클라언트 측에 있다.
    • 이탈시 반드시 대기열 종료 API를 호출하여 유저를 대기열에서 빠져나오도록 해야한다.
    • 대기열 종료 API를 호출하지 않으면, 스케쥴러 작업에서 대기열에 존재하지 않는 유저가 대기열에 들어갈 수있다.

2. 도입 방법

WebSocket 도입(STOMP 프로토콜)

  • WebSocket을 사용하므로 네트워크 오버헤드는 줄어든다.
  • WebSocket의 커넥션이 끊어지면 대기열 이탈 로직을 호출한다.

a. 대기열 내 유저키(userID)를 Pub/Sub Topic으로 한다.

  • 대기열에 일정한 시간 간격으로 대기열 내 자신(유저)의 순위를 확인해야만 한다. -> 이것도 일종의 polling이 아닐까...

b. 대기열 내 이벤트키(EventID)를 Pub/Sub Topic으로 한다.

  • 이벤트를 구독한 모든 유저는 같은 메세지를 받는다.
  • 대기열 진입시 대기열 내 유저의 식별할 수있는 고유한 번호를 발급한다.
    • 숫자 형태의 순번 ex) 1, 2, 3, 5 ....
  • 스케쥴러를 통해서 대기열 -> 작업열이동 시 이벤트 ID(Topic)으로 메세지를 보낸다.
    • 이때, 마지막으로 진입한 유저의 고유번호를 메세지에 포함한다.
    • 마지막 진입 유저의 고유번호와 내 고유번호의 차이로 순위를 결정한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants