• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Session

22.05.31 01:05 작성 조회수 234

1

안녕하세요
궁금한게 있어서 질문드립니다.

Session 이라는 인스턴스가 연결된 클라이언트 갯수만큼 만들어지는 걸로 이해했습니다.

저 상황에서 만약 server에 연결된 client가 100개라면

Server에 100개의 Session 인스턴스
각 client는 1개의 Session 인스턴스 일텐데

서버 입장에서 A라는 클라와 B라는 클라가 동시에 값을 보내어서 동시에 Send를 해야하는 상황를 생각한다면

서버에서 A 클라에서 받은 값과 B클라에서 받은 값은 각각 다른 Session 인스턴스로 받기 때문에 서로 아무리 멤버변수라고 해도 정적이 아닌 이상 서로 공유하고 있지 않을텐데 Lock를 사용하는 이유가 궁금합니다.

send 할때 lock을 이용하는건 하나의 인스턴스 안에서 여러개의 Thread가 생기는것을 고려해서 만들어준건가요??

답변 1

답변을 작성해보세요.

2

서버에서 A 클라에서 받은 값과 B클라에서 받은 값은 각각 다른 Session 인스턴스로 받기 때문에 서로 아무리 멤버변수라고 해도 정적이 아닌 이상 서로 공유하고 있지 않을텐데 Lock를 사용하는 이유가 궁금합니다.

합리적인 추론이었지만, 현실은 그렇지 않습니다.
비록 A, B 클라가 보내는 정보는 각기 다른 Session을 통해 받는 것은 맞지만,
그들이 조작하는 게임 세상의 Player는 동일한 공간에 있고
그 주변에는 몬스터들이 우글거리며 스킬이 난무하고 있겠죠.
A클라가 [내 플레이어는 C 몬스터를 공격할꺼야] 라는 의사표시를 서버에 전달한다면,
그 공격 행위는 A클라한테'만' 영향을 주는게 아니라 실제로
동일한 공간에 있는 모든 클라들한테 영향을 주기 때문에
그렇게 간단히 한 명한테 보내고 잊고 살 수가 없습니다.

이렇듯 다수의 플레이어들이 온갖 행동을 하는 상황에선
누가 어느 순서로 무슨 행동을 할지 예측할 수가 없습니다.
가령 위에서 A클라가 [내 플레이어는 C몬스터를 공격할꺼야]를 서버에 전달하는 와중에,
E클라가 [A클라한테 귓속말로 Hi라고 전달해줘]라는 요청을 할 수도 있겠죠.