• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Session.Disconnect 락 필요성

22.06.29 18:15 작성 조회수 158

0

static void OnAcceptHandler(Socket clientSocket)
{
    try
    {
		Session session = new Session();
		session.Start(clientSocket);

		byte[] sendBuff = Encoding.UTF8.GetBytes("Welcome to MMORPG Server !");
		session.Send(sendBuff);

		Thread.Sleep(1000);

		session.Disconnect();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
}

Session#1 강의 듣던 중 Session의 Disconnect 함수가 임계영역이 아닌 것 같아 질문드려봅니다.

쓰레드 마다 Session 객체를 새로 생성후 사용하기 때문에 Session객체가 다른 스레드가 접근할 수 없는 스택영역에 올라가있다고 생각했거든요.

혹시 제가 간과한 부분이 있다면 지적 부탁드립니다.

좋은 강의 감사합니다!

답변 1

답변을 작성해보세요.

1

지금은 그냥 간단히 테스트를 하기
일종의 에코 서버 기능만 하고 접속을 끊으니 말씀하신게 맞지만,
나중에 가면 session을 SessionManager 등 어딘가에서 들고 있게 됩니다.
그리고 특정 클라한테 패킷을 보낼 때 이 session을 통해서 데이터를 주고 받게 되는데요.
컨텐츠를 만들다가 클라가 이상한 패킷을 보내는 등 의심스러운 행동을 하면
강제로 Disconnect()를 때릴 필요가 생기게 됩니다.
따라서 나중에 가면 thread-safe하지 않게 되겠죠.