여러개 클라이언트가 줄 하나로 통신할 때

ex) 철광석을 여러 기차역들에게 가져다달라고 요청하면 기차역들이 그 요청을 받아서 철광석을 배송하는 시스템

생기는 문제 하나가 뭐냐면

클라이언트가 똑같이 설계되었다면 한 요청에 여러 개의 클라이언트가 동시에 응답해서 충돌이 생길 수 있음

ex) 철광석 50개를 달랬는데 기차역 3개에서 전부 50개를 가져다줘서 총 150개를 받게 됨


그래서 이걸 막기 위해 클라이언트마다 유일무이한 숫자 값을 하나씩 가지는 방법이 있음

그러면 요청이 들어온 후 이 숫자 값의 틱만큼 대기하다가 다른 곳에서 안받아가면 요청을 수락하는 등의 방법으로

중복 응답을 피할 수 있음

문제는 이 유일무이한 숫자 값을 어떻게 정해주냐인데




1. 사람이 직접 정해준다 - 귀찮아서 탈락




2. 클라이언트가 설치되는 순간의 시간 또는 그 시간을 입력으로 넣은 랜덤함수의 결과값 -

이건 딱히 사람이 해야 할게 없어서 편해보이지만

만에 하나 두 클라이언트가 정확히 동시에 설치된다면 똑같은 값을 가져 오작동이 난다는 문제가 있음 (물론 극악의 확률)

그래서 오작동을 감지하는 회로를 추가적으로 만들어놓고 오작동이 나면 사람이 가서 조정해줘야함

나는 완벽한 자동 시스템을 원하므로 탈락




그래서 고민하다가 생각난 방법이 아래임

3. 전역 물류 네트워크에서 하나의 아이템을 뺑뺑이돌리면서 받아온다


일단 전역 물류 네트워크를 준비함

아래 나오는 모든 상자는 전부 이 전역 물류 네트워크에 연결되어있음

그리고 그 전역 물류 네트워크에 평생 안 들어갈 거 같은 업그레이드 계획기나 산탄총 같은 아이템을 딱 1개만 준비함

그 아이템으로 필터를 걸어 놓은 보관상자(노란상자)에 그 아이템 1개를 넣어놈


그리고 클라이언트마다 요청상자(파란상자)와 능동공급상자(보라상자)가 있음

클라이언트에는 맨 위어서 설명한 대로 고유한 값이 저장될 예정인데

이 값이 아직 저장되지 않았을 경우 요청상자에서 바로 위에서 넣어논 아이템을 1개 요청함

그리고 그 아이템이 요청상자로 들어온 걸 확인한 후에 현재 시간 또는 그것을 시드로 한 랜덤함수 결과값으로 고유한 값을 지정함

고유한 값을 지정한 후 1개 들어왔던 아이템을 능동공급상자로 넘겨서 다시 내보냄.

아까 고유한 값이 저장되었으므로 다시 아이템을 요청하지 않게 됨.


이렇게 하면 전역 물류 네트워크에 지정한 아이템이 1개밖에 없으므로 클라이언트가 동시에 고유값을 할당받는 일이 생기지 않게 됨.




이렇게 하면 별론가

어떰??