작성
·
204
0
안녕하세요 강사님 항상 신속하고 정확한 답변에 다시한번 감사의 말씀드립니다. 다름이 아니라 여태 작성한 코드를 이해하기 위해 읽어보던중, 서버에서 클라로 데이터를 보내 Hello server! i am 10 과같은 정보들이 뜨는 과정을 이해하려 했습니다. 보면 Server program에서 GameRoom을 static 으로 받아서 안에 있는 코드가 실행된거 같은데 맞나요?
매번 강의 들으면서 코드를 이해하려고 노력하고 있습니다. 일단 기초가 너무 없어서 흐름이라도 알아야 나중에 뭐라도 할수 있을것 같아서요. 볼때마다 각각 클래스마다 조직적으로 깔끔하게 분리되어 아름답게 동작하는 느낌이 들지만, 읽고 이해하려고 보면 정말 머리가 아프고 어렵네요... ㅠㅠㅠ
답변 1
2
원래 네트워크 + 멀티쓰레드가 동시에 개입하면 코드가 원래 많이 복잡해집니다.
저도 처음 공부할 땐 많이 힘들었고 잘 이해가 안가는데 당연하다면 당연한겁니다.
서버의 경우:
- Listener (문지기)가 핵심이고
- 누군가가 접속하면 Listener가 Session을 새로 만들어주고
- 그 다음 패킷 전송이 오면 Session 쪽 코드에서 처리
- 그리고 실제 인게임 관련 코드는 GameRoom에서 처리
(지금은 간단하게 하기 위해 static이지만, 실제론 다수가 될 수 있음)
여기서 추가로 멀티쓰레드가 개입해서 Listener하는 애와
실제 패킷을 받는 애는 다른 쓰레드에서 처리하기 때문에 많이 어지럽습니다.
클라의 경우:
- Connector를 이용해 접속하고
- Session을 새로 만들어주고
- 실제 데이터를 보낼 떄는 Session.Send를 통해 보내줌
대략적으로 위와 같은데 breakpoint를 이리 저리 걸어보면서 살펴보시길 바랍니다.
그래도 한 번 이해하고 나면, C++ 서버도 거의 유사한 구조로 만들게 되어 이해하기 편합니다.