inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

socket과 stream을 닫는 시점이 궁금합니다.

293

idealjun

작성한 질문수 1

0

안녕하세요. 강의 잘 보고 있습니다. 

클라이언트 측에서  TcpClient로 생성한 socket과 stream의 해제 시점이 궁금해서 질문 남깁니다.

TcpClinet socket = new TcpClient(Ip, Port);

var stream = socket.GetStream();

Request();    // 서버로 한번 요청 보냄.

Response() ; // 서버로부터 응답받음.

// 이후 500ms 간격으로 요청없이도 응답이 계속 옴.

.

.

1. 위와 같이 [요청->응답->응답...] 식으로 한번만 요청하면  이후 지속적으로 특정단위의 데이터가 응답이 되는 시스템의 경우,

클라이언트에서는 소켓을 일단 닫고 다시 열어야  하나요, 아니면 이 경우에는 소켓을 닫을 필요가 없는건가요?

2. 덧붙여  [요청->응답->요청->응답 ...] 이 500ms로 계속 반복되는 경우에는 해제 시점이 언제일까요?

위의 2가지 경우 모두 socket과 스트림을 해제를 하지 않으면 StackOveflowException이 발생할 거 같은데, 

해제를 안해도 되는지, 해야된다면 시점이 언젠지 궁금합니다.

unity C# network

답변 1

1

Rookiss

1. 클라에서 소켓을 닫으면, 서버에서 더 이상 클라한테 메시지를 보낼 수 없게 됩니다.
그러니 게임 TCP 통신 방식에서는 처음에 소켓 연결이 이루어지면,
네트워크 연결이 필요한 동안엔 쭉 들고 있어야 합니다.

2. StackOverflow는 말 그대로 스택 버퍼가 다 찼을 때 발생하는 것이고,
주로 memcpy등 C++ 복사 실수나, 재귀함수 과다 호출로 인한 StackFrame 초과 등의 대표적 이유가 있습니다.
네트워크 요청/응답에서 한 번 보내고/수신 처리한 데이터는 영구적으로 유지되지 않을뿐더러
특별히 스택에서 관리되는 데이터도 아니라서 StackOverflow랑은 크게 연관이 없습니다.

보통 MSDN 예제에서는 네트워크 연결해서 데이터 한 번 보내고 종료하는 간단한 루틴으로 이루어져 있으니
데이터를 보낸 다음에 바로 리소스 정리를 해주지만,
게임처럼 장기간 유지되는 프로그램에선, 정말 프로그램이 종료되기 전에만 정리를 해주시면 됩니다.

TLS 질문드립니다.

0

43

2

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

0

46

2

Unity Span

0

76

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

76

1

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

0

70

2

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

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

104

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

145

2

유니티6 버전

0

97

2

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

0

134

2

커서의 위치의 중요성

0

103

2

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

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

61

1

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

0

190

2

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

0

82

2

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

0

105

1

스핀락 질문.

0

110

2