inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SendBuffer

서버 흐름에 있어서 궁금한점이 있습니다

해결된 질문

482

공부해보자

작성한 질문수 34

0

안녕하세요 SendBuffer까지 따라 해보고

전체적인 흐름을 그려보는 도중 궁금한 점이 생겨 질문드리게 되었습니다.

Listener 소켓에서 OnAcceptCompleted 함수의 마지막에서 다시 등록(RegisterAccept)을 해주는데요.

이 부분에 무한 루프를 넣어서 다시 등록하는 과정을 거치지 않도록 해보았습니다.

따라서 더미 클라이언트 한 명이 OnAcceptCompleted에서 RegisterAccept를 호출하지 못하기 때문에

더미 클라이언트를 하나 더 실행했을 때  동시 접속이 안되어야 할 것 같은데 접속이 되더군요.

질문1) 위와 같은 상황은 _listenerSocket.Listen 때문이 맞나요? 이 부분을 1로 수정하니 정상적으로 동시 접속이 안되더군요.

질문2) 만약 맞다면 Listen 함수를 통해 동시 접속자 수를 컨트롤하나요?

질문3) Listen(10)을 넣어 10명의 동시 접속자가 있다면 최소 필요 쓰레드의 수는 10개인가요? 즉, 쓰레드의 최소 필요 개수 = 접속자 수 = 세션 수 인가요? 

질문4) 윗 내용이 맞다면 많은 수의 쓰레드가 존재하여도 문제없나요?(예를들어 동시접속자가 1000명이라면 최소 1000쓰레드 이상)

읽어주셔서 감사합니다.

C# network unity

답변 1

1

Rookiss

질문1) 위와 같은 상황은 _listenerSocket.Listen 때문이 맞나요? 이 부분을 1로 수정하니 정상적으로 동시 접속이 안되더군요.

네 Listen 걸어놓은 횟수에 연관이 있습니다.

질문2) 만약 맞다면 Listen 함수를 통해 동시 접속자 수를 컨트롤하나요?
동시 접속자 수라기 보다는 [거~의 동시에] 입장할 수 있는 접속자와 연관이 있습니다.
서버가 오픈하자 마자 유저들이 막 몰리는 상황이라면,
일부 유저는 접속을 실패하겠죠.

질문3) Listen(10)을 넣어 10명의 동시 접속자가 있다면 최소 필요 쓰레드의 수는 10개인가요? 즉, 쓰레드의 최소 필요 개수 = 접속자 수 = 세션 수 인가요? 
아닙니다.

질문4) 윗 내용이 맞다면 많은 수의 쓰레드가 존재하여도 문제없나요?(예를들어 동시접속자가 1000명이라면 최소 1000쓰레드 이상)
동접 = Listen 수가 아닙니다.

Listen 걸어준 개수는 안내를 하는 직원 수라고 생각하시면 됩니다.
식당에서 100명 입장한다고 직원이 100명일 필요는 없죠.
그렇다고 안내원이 1명이라면, 손님이 한 번에 100명 입장하는 상황에서 곤란하긴 할겁니다.

0

Rookiss

1) 비동기 함수들 중에서 하드웨어를 다루는 (네트워크, 파일 입출력 등) 애들은
유저 레벨에서 처리가 불가능하고 커널 모드로 가서 처리 해야 합니다.
따라서 문맥 교환은 필연적으로 일어납니다.
비동기 함수 = Task는 아니고,
Task가 혼동되신다면 그냥 잊으시고 모든걸 쓰레드 단위로 생각하시고,
Task는 내부적으로 특정 쓰레드에 의해 실행되는 일감 정도로 이해하면 됩니다.
그리고 운영체제 관련 이론서를 하나 보시면 도움이 됩니다.
2) 쓰레드입니다

TLS 질문드립니다.

0

33

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

37

2

Unity Span

0

64

2

XML, Dll 차이점

0

98

2

Session 질문입니다

0

74

1

Write Read 커서 키워드

0

69

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

65

2

네트워크 Send 전담 스레드 배치

0

94

2

UnhandledException 으로 서버 터지는 경우

0

82

2

컨텐츠 단, 엔진 단

0

100

1

질문 있습니다

0

73

2

C# 게임서버 3D MMORPG

0

141

2

유니티6 버전

0

94

2

receive하는 부분과 send하는 부분의 차이

0

128

2

커서의 위치의 중요성

0

99

2

C++ 전혀 모르는데 C# 서버

0

164

2

강의에 질문이 있습니다

0

83

2

멀티스레드 이해도 질문

0

90

1

500 vs 500

0

122

3

OnAcceptHandler 액션 함수

0

57

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

185

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

78

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

100

1

스핀락 질문.

0

104

2