• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

질문 있습니다

24.03.08 16:12 작성 24.03.08 16:24 수정 조회수 120

0

영상에서 7분즘에 이런 말씀을 하셨는데요.

"커넥터를 딱 하나만 하는 경우도 있겠지만 경우에 따라서는 우리가 리스너에서 계속 뺑뺑이를 돌면서 천명이건 만명이건 계속 받을 수 있는 것처럼 커넥터도 한 번만 받고 끝내는게 아니라 여러 병을 받을 수 있으니까 굳이 이런 식으로 소켓으로 받기 보다는 이런 식으로 이벤트를 통해서 인자를 넘겨주고 있는 것이다."

하지만 그 리스너에서는 Socket을 필드로 들고 있도록 하셨었잖아요? Socket을 필드로 들고 있는 것과 SocketAsyncEventArgs의 Token으로 socket을 넘겨주는건 결국 똑같이 작동하는 건가요?

connector에서는 Socket을 필드로 두지 않고 args의 token으로 socket을 건네주신 이유를 이해하지 못하겠습니다.

아니면 그냥 똑같이 동작하는데 이런 방법도 있다고 알려주기 위함이셨나요?

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.10

안녕하세요, 인프런 AI 인턴입니다.

게임 서버에서의 ‘connector’와 ‘listener’가 각기 다르게 socket을 처리하는 방식에 대해 질문해주셨네요. ‘Socket’을 필드로 들고 있는 것과 ‘SocketAsyncEventArgs’의 Token으로 socket을 넘겨주는 것은 결국 ‘Socket’의 연결을 관리하는 방법에 차이가 있습니다. 필드로 들고 있는 경우는 해당 인스턴스가 ‘Socket’의 상태를 직접 관리하는 반면, Token으로 넘겨주는 경우는 비동기 이벤트 처리에 특화된 방식을 이용하여 ‘Socket’의 상태를 관리할 수 있습니다.

Connector에서 Socket을 필드로 두지 않고 Token을 건네주는 이유는 비동기 소켓 이벤트를 효율적으로 처리하기 위함입니다. ‘SocketAsyncEventArgs’ 객체를 이용하면 다수의 소켓 연결을 비동기적으로, 그리고 동시에 처리할 수 있기 때문에 서버의 부하를 분산하고 성능을 향상시킬 수 있습니다. 따라서 SocketAsyncEventArgs를 사용하는 것은 단순히 다른 방법을 소개하는 것을 넘어서, 특정한 상황에서 더 나은 성능을 제공할 수 있는 설계 선택일 수 있습니다.

강의에서 언급된 ‘뺑뺑이를 돌면서’라는 표현은 이벤트 기반 모델을 통해 반복적으로 연결을 처리하며 스케일링하는 개념을 이야기하는 것으로, 한정된 리소스 내에서 효율적으로 많은 연결을 관리하기 위한 방법입니다. 결론적으로 이 두 방식은 서로 다른 상황과 요구사항에서 각각의 장점을 가지고 사용될 수 있습니다.

추가적으로 연락을 원하시면 제공된 스프링 부트 참조 문서에 대한 내용을 확인해보시는 것도 도움이 될 것입니다. 해당 문서에서는 Spring Boot를 이용해서 여러 커넥터를 활성화하는 방법에 대해 설명하고 있으며, 이는 게임 서버에서 여러 연결을 관리하는 방법과도 관련이 있을 수 있습니다.