월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓에 관하여
안녕하세요 좋은강의 잘 듣고있습니다. 소켓부분에 있어서 궁금한점이 있어 질문드리게 되었습니다. 문지기가 대리인에게 휴대폰을 줄 때 연락온 손님의 주소를 넣음으로써 대리인이 손님에게 연락할 수 있다는 것은 알겠습니다만, 손님은 어떻게 대리인에게 연락을 취하나요? 손님은 대리인으로부터 연락이 오고나서 연락온 주소를 보고 연락할 수 있게 되는것인가요? (즉, 대리인으로부터 먼저 연락을 받은 후 부터 쌍방향으로 연락이 가능한가요?)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
다수의 패킷을 동시에 Send / Recv 할 때
안녕하세요. Rookiss님. 강의 참고하여 Unity 환경에서 서버/클라 개발 중 문제가 디버깅을 해도 이해가 되지 않는 부분이 있어 질문 남깁니다. 현재 서버/클라 전부 Unity 환경으로 개발중이며 RecvBuffer는 강의 그대로 사용중이고 서버/클라에 각각 JobQueue 적용, SendBuffer는 byte 배열의 깨짐이 발생하여 걷어낸 후 직접 ArraySegment를 직접 생성하는 방식으로 변경 후 아래와 같은 조건으로 테스트를 진행 했습니다. 1. 5종류의 패킷 2. 서버에서 더미 데이터를 생성. 3. 생성된 데이터를 For문을 돌려 각각 100개씩 서버에서 클라로 Send 위 조건으로 진행 했을 시, 각 패킷의 최소 1개씩은 디버깅을 통해 제대로 들어오는걸 확인 했지만 그 이후 패킷은 아래와 같이 들어옵니다. 현재 코드 상 헤더 체크를 하여 PacketCommand에 따라 Deserialize 한 후 데이터 확인을 위한 Queue에 패킷을 EnQueue하고 Queue.Count로 확인하고 있습니다. 만약 Send/Recv 도중 바이트 배열에 문제가 있었다면 헤더 체크부분에서 로그가 남을텐데 로그조차 남지 않으며 위 이미지를 보시면 5개의 패킷을 각각 100개씩 보냈으니 총 Send 패킷은 500개이며, 실제 클라에서 Recv 받은 패킷도 9 + 25 + 1 + 464 + 1 = 500으로 패킷의 수는 동일합니다. 아래는 각 100개씩 Packet을 Send 요청 부분입니다. 혹시나해서 디버깅을 해보니 최초 각 패킷 1개씩은 RegisterRecv() , OnRecvCompleted() 함수에서 브레이크포인트가 잡히나 랜덤한 시점부터 브레이크포인트가 잡히지 않고 처리 진행되는걸 확인 할 수 있었습니다. 위 현상은 패킷의 총 갯수는 같지만 Send 할 때마다 각각의 + 되는 패킷 카운트는 다르며 예외처리에도 걸리지 않고 있어 어디부터 손을 봐야할지 모르겠습니다. 그리고 또 다른 특징으로 하나의같은 패킷만 여러개 Send 시엔 정상적으로 Recv 받는걸 확인 할 수 있었습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
하나의 프로그램에 쓰레드를 여러 개 부여한다에 대해 궁금한점이 있습니다.
안녕하세요. 강사님 멀티쓰레드 부분 강의를 듣고 궁금한점이 생겨 질문드립니다. 우선 하나의 프로그램에 여러 개의 쓰레드를 부여한다라는 것은 동시에 여러 작업들을 할 수 있다 정도로 이해를 했습니다. 문득 궁금한 점이 생긴 부분은 작업 관리자에서 성능 부분을 보면 저의 경우 논리 프로세서가 12개라고 나옵니다. 그렇다면 논리적으로 12개의 코어를 사용한다고 판단되어 지는데요. 여기서 백단에서 프로세스가 170개 가량이 돌아가는 데 스레드가 대략 2400개 정도 실행되고 있습니다. 백단에서 실행되는 프로세스가 엄청나게 많고 그 백단에서 실행되는 프로세스들 조차도 실행되기 위해서는 CPU 코어를 일정시간 획득해야 되는 것이겠지요 ? 그렇다면 엄청나게 빠르게 12개의 코어를 2400개의 쓰레드에게 일정시간 씩 분배하고 있다고 생각 되어지는 데요. 그렇다면 제가 작성한 프로그램에서 5개의 쓰레드를 운영한다고 해도 5개의 코어를 동시다발적으로 획득하는 것이 아닐테고 고 순차적으로나마 하나의 프로그램이 5번의 코어를 할당받아 5개의 실행흐름을 각각 수행하고 다른 프로그램으로 CPU 제어권을 넘겨주는 방식으로 이해하면 될까요 ?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티 쓰레드 질문 드립니다.
멀티 쓰레드 질문 드립니다. GameRoom 이 JobQueue를 가지고 있어서 멀트 쓰레드에서 안전하다고 하셨는데 GameRoom 의 Broadcast , Enter,Leave 등은 JobQueue 를 이용 하니 멀티 쓰레드에서 안전 한거 같은데 GameRoom 의 Flush 는 어떻게 안전 할수가 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Array.Copy()질문
안녕하세요 좋은 강의 제공주셔셔 감사합니다. Array.Copy를 하는 상황에서 궁금한 사항이 있는데요 같은 배열을 값을 _buffer.Offset 위치로 복사하면 뒤에 해당 데이터가 남는 상황이 발생되지 않나요 ? 해당부분이 자체적으로 처리되는건지 궁금합니다. ex) [] [] [r*] [*] [w*] [] [] Array.Copy 이후 [r*] [*] [w*] [*] [*] [] []
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
진행에 대한 조언을 부탁드립니다
안녕하세요 조금전에 파트3를 마치고 해당 강의를 들었습니다. 파트4 첫강부터 이렇게 질문을 드리는 이유는 지금부터 어떻게 공부를 해나갈까하고 고민이 생겨서 입니다 최종적으로는 강사님의 C# Unity 강의는 다 마치는걸로 계획을 하고 있습니다 그런데 파트3 마지막 강의에서, 스스로 게임을 간단하게 만들어 보는 걸 추천한다고 하셔서 지금 파트4를 당장 진행하지 말고 기왕 앞에서 C#, 유니티에 대한 기본강의를 마쳤으니 간단한 게임을 직접 만들어 보고 파트4를 진행 해야 하는가 고민 중입니다 혹시 이에 대해 어떻게 생각하시는지 조언을 구할 수 있을가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
25:28분 지점 SocketAsyncEventArgs 질문입니다
25:58분 지점에서 SocketAsyncEventArgs형식의 args를 재사용할때 깨끗하게 밀어줘야해서 AcceptSocket을 null로 밀어주셨는데 SocketAsyncEventArgs 안을 들어가보니 AcceptSocket 뿐만 아니라 ConnectSocket, Buffer, UserToken 등의 엄청 다양한 변수들이 있는데 AcceptSocket 하나만 null로 밀어주는 이유가 있을까요? 나머지 값들은 자동으로 초기화되는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS 관련 질문입니다
조금 헷갈리는 부분이 있어서 질문드립니다 현재 Static 같이 힙 영역에 있는 데이터들을 동시에 가져갈 경우 데이터가 바뀔수 있어서 Lock을 걸어 싱글 쓰레드처럼 한번에 한명만 접근하여 처리하도록 알려주셨는데 TLS를 사용하면 공용 공간에 있는 데이터를 최대한 많이 자신의 쓰레드로 가져와서 각각 처리하고 다시 돌려주는걸로 이해를 했는데 그럼 나중에 각각의 쓰레드에서 처리하고 난 결과가 서로 상충되는 경우가 나타날수도 있지 않나요? 아니면 한명씩 싱글 쓰레드로 처리하는데 가져오는 데이터 양이 많아져서 처리속도가 빨라지는것이라고 이해해야 할까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷모아보내기 실습 보내는 갯수가 500으로 안떨어지는경우
더미클라이언트 수를 500으로 설정하고 실행 했을때 500으로 유지되지는 않고 267 정도로 계속 보내게 됩니다. 프로세스 메모리는 일정하게 유지가 되구요. 이런경우 프로세스 성능에 따라서 모아보내기가 적게 자주 보내게 될수도있나요? 예를 들어 while에서 패킷을 모아보내는 수가 500이 안차더라도 보낼수 있는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
.NetCore 가 없고 .Net Framework 만 있는데 왤까요....
프로젝트 만들기 해서 콘솔앱 c#으로 찾아보면 .NetCore 가 없고 .Net Framework 만 있는데 왤까요.... 어떻게 해결해야 하나요..?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Action Invoke 질문입니다.
action 에 이벤트를 할당하고 Invoke 해서 실행시키는데 이게 그냥 실행시키는거랑 어떤 차이가 있을까요? Action<PacketSession, IPacket> action = null;if (_handler.TryGetValue(p.Protocol, out action)){ //1 action.Invoke(session, p); //2 action(session, p);}
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Big O 표기법의 LOG N 이유?
강의를 듣던준 Job Timer 가 시간 복잡도가 Log N 인 이유가 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
원자성 관련 궁금함이 있어 질문드립니다
경합 조건 때문에 원자성을 보장해야 한다고 하셔서 if (_lock == 0) _lock = 1; 위와 같은 코드를 Intetlocked.CompareExchange나 Interlocked.Exchange를 이용해서 한번에 실행하게 하여 원자성을 보장해야한다고 하셨는데 그중에 궁금한점이 2줄, 3줄에 걸쳐서 실행이 되나 모든 과정이 한번에 실행이 되나 경합 조건에 의해서 아주 미세한차이로 같이 접근을 하게 되면 한번에 실행되는것도 동시에 여러번 실행될수도 있을 것 같다는 생각이 드는데 Lock을 걸면 어떤 경우에도 싱글쓰레드처럼 한번만 실행되는것이 보장되는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
[Session#2] 강의
안녕하세요. Session2 강의에서 Send구현을 했는데 막힌부분이 있습니다. Send에 Lock을 걸어주셨는데 그 이유가 Send를 여러 쓰레드가 호출해서 RegisterSend() 함수가 동시다발적으로 실행되면 안되니 Lock을 걸어준다고 이해했습니다. 그런데 궁금한게 지금 상황이 좀 이해가 안되는것 같습니다. 제가 이해한 상황은 아래와 같습니다 현재 Session은 DummyClient에서 Accept한 세션소켓으로 주고 받고 하는중이다. (OnAcceptHandler 함수가 실행되고 해당 세션소켓을 인자로받아 Session.Start를 해줬으니깐.)> 서버가 Send를 여러 쓰레드로 해서 해당 세션소켓으로 정보를 보내는 상황???? 서버에서 멀티쓰레드로 Send를 사용해서 정보를 보내는 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
각 소켓 주소는 하나만 사용할 수 있습니다.
안녕하세요. 강의 잘 보고있습니다~. '소켓 프로그래밍' 들으면서 실습을 따라해봣는데 다음과 같이 Exception이 뜹니다. 뭐가 문제일까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
쓰레드 While 문 질문입니다
ThreadMain함수 안에서 release 모드에서는 코드가 변형이 되어 while(_stop == false) 가 if (stop == false) while(true) 형태로 변형이 된다고 하셨는데 그러면 쓰레드를 사용하는 경우에 while(_stop == false) 같은 형식을 쓰는 것을 자제해야 하는건가요? 지금이야 몇줄 안되서 멈추는 원인을 찾기 쉬웠겠지만 나중에 코드가 길어질 경우 그런 변형으로 인한 오류 부분이 나타나면 찾기 어려울것 같은데 어떻게 해야 하나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Increment와 Decrement에 대해 질문합니다.
Increment 와 Decrement가 int형 함수로써 해당값을 1단위로 증감소하여 리턴값을 전달하는것 같은데... 이게 1단위로 증가감소만 할 수 있는건가요? 앞서 설명 해주신 예로 아이템 복사방지 및 골드 증감소에 대입하면 좋을 것 같다는 생각이 들더라고요. 그래서 예를 들어 1000단위 10000단위 증감소라던지 float형의 증감소라던지 이런게 가능한지 궁금합니다. Interlocked.Increment는 1단위 증감에만 해당 되는 것 같아서요.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
가시성에 관하여
안녕하세요 좋은강의 잘 듣고있습니다. 다름이 아니라 강의를 듣던 중 궁금한 점이 생겨 질문드리게 되었습니다. _locked 변수는 volatile키워드를 통해 가시성을 보장하고 있으나 _num 변수는 가시성을 보장받지 못하고 있는 상황인데 어떻게 정상작동하나요? 또한 _locked 변수의 volatile 키워드를 제거하여 가시성을 보장받지 못해도 정상작동하네요. volatile키워드나 메모리베리어를 통한 가시성의 보장은 언제 해주어야하는 것인가요? 읽어주셔서 감사합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IP가 틀려서그런지 유니티에서 서버로 접속이 안되네요.
첫번째 사진이 서버 IP로그구요. 밑에 사진이 유니티 클라이언트 IP로그 입니다. 유니티에서 서버로 접속할때 OnConnectCompleted Fail: ConnectionRefused 로그가 뜨면서 플레이어 케릭터가 생성이 안되는 현상이 발생했습니다. 서버에 연결이 실패한 원인을 찾아보니 서버쪽에선 아이피가 :::1인반면 유니티쪽은 127.부터 시작하는 아이피로 서로 틀리더라고요. 서버쪽 로그를 보니 더미 클라에서 모아 보내기가 계속 찍히는거 보면 문제는 없어보입니다만, 이 경우 어떻게 해야될까요? 잘 부탁드립니다 ^^
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TryWriteBytes함수
TryWriteBytes함수가 BitConverter 클래스에 없는데 어떻게 해야 할까요?