월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
MemberJob 생성자 부분에서 에러가 발생해 질문드립니다.
아래 질문을 올리신 분과 동일한 문제인데 아래처럼 에러가 발생합니다.강의 중간에 std::apply( )를 사용하기 위해 c++ 17로 변경하셨고, c++17 이전 버전에서 동작하기 위한 xapply 코드를 작성하셨습니다. 저의 생각으로는 std::apply( )를지원하지 않는 이전 버전에서 동작하기 위함이니까 저의 원래 환경인 c++14로 변경해서 빌드를 진행하니 에러가 발생합니다.일단 다시 c++17로 변경해서 진행해보니 에러는 발생하지 않는데 강의에서 설명하신 코드(MemberJob)가 c++17 이전 버전에서는 동작하지 않는 것인가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
LIst<구조체> 형태의 패킷을 보내는 방법이 있나요?
List<구조체> 형태를 패킷으로 보낼려고 하는데 BufferWriter부분에서 List<구조체> 데이터를 쓸때 엑세스 위반의 오류가 나오게 됩니다.List<구조체> 형태의 패킷을 보내는 방법이 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
기능 구현을 할 때 어떤 생각을 하고 만드시는지요 ?
기능 구현을 하실 때, 어떠한 기능을 구현할 것인지 먼저 결정하고 실제 구현을 하고나면 해당 기능은 특정 이벤트가 발생할 때, 컨트롤러나 이벤트 핸들러단에서 로직을 호출할텐데 이때 궁금한점이... 기능을 구현하실 때 특정 컨트롤러나 핸들러단에서 호출해준다고 가정하고 구현하시는게 맞으신가요 ??(예를들어, AccountManager나 UserManager 객체에서 제공하는 기능들에서도 어디에서 호출되는지는 생략하고 특정 기능을 구현하시는 부분)개발에 대한 이해가 부족한 상황에서 무작정 게임 개발이 궁금해서 도전하게 되었는데... 해당 부분이 자꾸 생각나서 질문 남겨봅니다. 감사합니다 :)
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IOCP 서버 연동 강의 출시 및 프로그래밍 커리큘럼 관련 문의를 드립니다.
안녕하세요. ROOKISS강사님. 강사님의 c++ 과 서버 강의에 연일 감동을 받으면서 공부중인 퇴사한 직장인 취준생입니다. 사실 저는 학부는 전자과를 나와서 대학원을 정보보안쪽을 나왔으나 프로그래밍에 대한 콤플렉스가 있었습니다. c언어 f학점을 받고 프로그래밍과는 담을 쌓았던 웃지못할기억이 있습니다. 그러나 직장을 6년 다니면서 문서작업업무를 주로 하면서 개발을 모르면 it에서 성장하는데 한계가 있음을 느끼고 직장정치등의 여러 사정에 과감히 퇴사를 결심하고 다시 취업을 준비중입니다. 개발역량을 키우고자 프로그래밍 공부를 하던중 강사님 커리큘럼을 알고 주저없이 신청하게 되었습니다. 제가 개발실력은 많이 형편 없지만 강사님의 서버커리큘럼을 보고 우선은 서버 커리큘럼은 무조건 다 뛰고 강사님께서 설명하신 내용을 제가 안보고 코드를 짤 수 있는 역량을 기르기로 마음먹은 상태입니다. 궁금한 점은 제목과 같이 다음과 같습니다.iocp서버 연동강의 출시일 대략 일정은 어떻게 될까요?강사님의 c++과 c# 서버 커리큘럼외에 c#웹개발/DB도 들을 생각입니다. 혹시 추후에 C++로 웹개발이나 DB, 프레임워크와 같은 강의도 출시 계획이 있으신지와 있다면 대략적인 일정이 궁금합니다.WINAPI의 경우 나온다면 언제쯤 출시하실 계획이신지 궁금합니다. 강사님이 만일 어떤 후배가 게임분야가 아니더라도 이건 꼭 공부하면 좋겠다 하시는 분야나 내용이 있다면 추천좀 부탁드립니다. 저는 이 강의 이외에 리눅스시스템 프로그래밍과 컴파일러도 만들어볼 계획을 갖고 있습니다. 실천을 당연히 할 준비는 되어 있습니다. 프로그램과 담을 더이상 안쌓기로 맘 먹었기에 용기내서 길을 가보고자 합니다. 좋은 강의 출시 많이 부탁드립니다. 역량을 키워서 게임분야나 그곳이 아니더라도 IT에서 통할 수 있는 인재가 되어보고자 합니다. 바쁘시겠지만 일정을 알려주시면 감사하겠습니다. 좋은 컨텐츠 너무 감사드립니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IOCP 핸들러 질문 드립니다.
처음에 CreateIoCompletionPort 함수를 통해 INVALID_HANDLE 을 주며 IOCP 핸들 만드는 것에 대한 질문입니다.강의에서는 한개의 IOCP 핸들이 모든 요청을 처리 하는것으로 보이는데단편적인 예로 아래와 같이 AcceptEx 를 담당하는 IOCP 핸들 1개Send/Recv 를 담당하는 IOCP 핸들 1개이처럼 각자 다른 IOCP 핸들이 해당 오퍼레이션만 담당하게 설계 할 수 있을까요 ?이렇게 설계한다면 문제점이 있을까요 ?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
연산자 질문
그 인벤토리와 관련된 예시를 드실 때 (순환 x 예시) 인벤토리의 생성자와 소멸자를 호출해본 결과 k1 = nullptr 후에도 인벤토리의 소멸자가 호출이 안되더라구요 k1->inventory = new Inventory(k1) 이부분에 관련해서 분석을 진행하고 있는데new Inventory(k1)에서 인벤토리의 ref 카운트 1 증가. (refcountable 규칙에 의해)InventoryRef _inventory = new Inventory에서 이동 대입 연산자로 인해 레퍼런스 증가 x메인 스레드 종료 후 k1의 소멸자가 호출되고서 멤버 변수도 초기화되는 과정에서 _inventory = nullptr 로 인해 레퍼런스 감소가 되어 소멸자가 출력되어야 하는게 정상 아닌가요? 제가 어느 부분에서 놓친건지 잘 모르겠습니다.. knight의 소멸자에 inv의 레퍼런스 카운트 값을 감소 시키니 inv의 소멸자가 출력됐는데, 어느 부분에서 레퍼런스 카운트 값이 1이 추가로 들어왔는지 못찾겠네요..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Lock-Based Stack / Queue 강의 관련 질문입니다.
안녕하세요. 선생님.항상 좋은 강의 만들어주셔서 감사합니다.다름이 아니라 강의 영상을 보면 queue의 TryPop(OUT data)와 같이 OUT이 TryPop 함수 다음에 붙어있는데요.visual assist에서 제공해주는 기능인 것인가요?찾아봐도 C++ 관련 OUT 키워드 문법이 없는 것 같고, 해당 키워드를 입력해도 저는 컴파일이 되지 않아서 질문드립니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Push의 LCurrentJobQueue관련 질문입니다.
현재 JobQ에 Push하는 과정에서LCurrentJQ를 확인하여 GlobalQ에 넣을지, 스스로 실행할 지를 결정하는 것으로 보입니다. TLS는 각 Thread마다 별개의 주소 공간으로 소유하고 있는 것처럼 동작한다고 이해하고 있습니다.한 thread에는 실행 흐름이 하나인 것으로 알고 있는데LCurrentJobQueue가 nullptr이 아닌 상황에서 Push가 발생할 수 있나요?Execute를 실행하는 thread의 LCurrentJQ만 nullptr이 아닐 것 같은데 Execute가 실행 중인 thread라면 Push를 동시에 실행할 수 없을 것으로 생각됩니다. ㅜㅜ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SendBuffer Pooling 관련 질문있습니다.
여기서 다 썼으면 버리고 새거로 교체할 때 교체하지 않고 그냥 Reset만 호출해서 _usedSize를 0으로만 해줘도 되지 않을까 했었는데 WSASend를 호출하는 과정에서 아직 예전 버퍼가 날아가면 안되는 상황이 있기 때문에 새로 할당해준다. 가 맞게 이해한 부분인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ACQUIRE_TIMEOUT_TICK에 관해 질문이 있습니다.
여기서 ACQUIRE_TIMEOUT_TICK 보다 작업 시간이 길어질 때도 일반적인 경우 엄청난 문제가 있다고 생각하지만... 여기서 CRASH를 때려서 서버를 죽이는 것이 맞는지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Job 생성자 관련 질문입니다.
위의 생성자를 이용하여 아래와 같은 코드로 job 객체를 따로 생성해보려고 하였습니다.맞는 생성자 instance가 없다고 하며 코드가 정상 동작 하지 않았습니다.JobSerializer::PushJob의 과정을 똑같이 따라한 것 같은데 동작이 안되는 이유를 모르겠습니다.원인을 알고 싶어 찾아보았으나 제가 template 에 대한 이해가 미숙하여 어떤 이유로 객체 생성이 되지 못하는 건지 모르겠습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 데이터 크기를 유동적으로 바꾸고싶습니다.
안녕하세요. 선생님지금 탑뷰 PVP게임 슈팅게임을 포폴로 만들고있습니다.서버에서 현재 월드에 올라와있는 객체들의 데이터를 클라이언트한테 보내있습니다. ex)모든 객체Update패킷{객체[10];}예시로 이런식으로 패킷내부에 최대 객체배열의 크기를 10개로 잡고 데이터를 전달하는 형식으로 하고있습니다. 이때 현재 존재하는 객체의 갯수 만큼 크기를 잡아 패킷을 전달하고싶습니다. 아 또 추가로 질문이 있습니다.보통으로 패킷의 최대량을 몇으로 설정하시나요? 구글링을 해보니까 네트워크 전송과정 때문에 1460바이트를 되도록 넘지 말라고 되있더라구요. 그래서 저는 1024바이트로 맞춰놨습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS와 공유자원
제가 강의를 시청하고나서 TLS 같은 경우에는 각 스레드 별로 사용할 수 있는 extern 변수를 따로 만들어 준 느꼈습니다. (실제 강의에서도 그렇게 말씀하셨구요) 근데 이걸 서로 다른 스레드에서 읽거나 수정할 수 없다고 하면, 서로 다른 스레드에서 읽고 수정할 수 있는 공유 자원과는 좀 거리가 먼 느낌이 있어 활용도가 낮을 것 같다는 개인적인 생각이 드는데... 강의에서 예로 드신 사례 외에 게임쪽 과 관련해서 추가적인 예가 있을까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS의 물리적 저장소 위치가 어디인가요?
TLS는 쓰레드마다 가지고 있는 고유한 저장 공간인데메모리 모델 강의에서 나온 CPU코어 마다 가지고 있는 고유 캐시 영역에 저장이 되는 것인지아니면 RAM에 쓰레드 갯수만큼 공간이 할당되는 것인지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
저연차 프로그래머 공부 방향성 질문입니다.
안녕하세요. 강의에 많은 도움을 받고 있는 저연차 게임 프로그래머입니다. 코드 리뷰만 받으면 설계나 코드 구조로 매번 지적받는데, 공부 좀 하라는 소리을 들어도 언어 문법이나 프로그래밍 기술 이론과 달리 어떻게 공부해야 하는지 감이 잘 잡히지 않습니다. ㅠㅠ나름대로 클린 코드나 리팩토링같이 근본(?)이라 하는 책들도 읽어 봤지만 읽을 땐 그렇구나 하면서 술술 읽다가도 실제 코드에 적용하려 하면 잘 와닿지 않는 것도 사실입니다.코드 설계나 좋은 구조를 짜는 능력은 어떻게 쌓는것이 좋을까요? 혹시 도움받으신 강의나 책이 있는지 궁금합니다.강의 내용과 직접적인 관련이 있는 질문은 아니지만… 궁금증이 생겨 남겨봅니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session의 RegisterSend 의 wsaBufs 관련해서 질문드립니다
Vector<WSABUF> wsaBufs; wsaBufs.reserve(_sendEvent.sendBuffers.size()); for (SendBufferRef sendBuffer : _sendEvent.sendBuffers) { WSABUF wsaBuf; wsaBuf.buf = reinterpret_cast<char*>(sendBuffer->Buffer()); wsaBuf.len = static_cast<LONG>(sendBuffer->WriteSize()); wsaBufs.push_back(wsaBuf); }강의의 코드는 위와 같이 작성되어 있습니다.이렇게 할 경우 wsaBufs.push_back(wsaBuf) 가 복사 연산으로 수행되는 건가요?만약 그렇다면 복사 연산을 거치지 않고 바로 객체를 벡터에 넣을 수 있는 방법은 없을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
wait이 끝나면 어떻게 되나요?
안녕하세요queue가 비어있어서 잡았던 lock을 풀고 대기하다가 notify_one함수가 알려주면 다시 wait함수부터 실행이 되는건가요? 만약 그렇다면 다른 Consumer 스레드(있다면)와도 wait함수를 통해 lock을 잡으려고 race를 할 텐데 그럼 unique_lock 선언을 while문 밖에서 해줘도 상관이 없을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
event 관련 질문 있습니다.
동일한 내용으로 동일한 코드를 쳤는데 디버그로 cpu 점유율 확인시 저는 똑같이 8% 가 나오는데 혹시 어떤 부분에서 이러한 차이가 나는지 알 수 있을까요? mutex m; queue<int32> q; HANDLE handle; void Producer() { while (true) { { unique_lock<mutex> lock(m); q.push(100); } ::SetEvent(handle); this_thread::sleep_for(10000ms); } } void Consumer() { while (true) { ::WaitForSingleObject(handle, INFINITY); unique_lock<mutex> lock(m); if (q.empty() == false) { int32 data = q.front(); q.pop(); cout << data << endl; } } } int main() { handle = ::CreateEvent(NULL/*보안속성*/, FALSE/*bManualReset*/, FALSE/*bInitialState*/, NULL); thread t1(Producer); thread t2(Consumer); t1.join(); t2.join(); ::CloseHandle(handle); }
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
STOMP Allocator 미사용시 에러가 발생해 문의드립니다
JopQueue 강의의 소스코드를 내려받아 테스트중입니다.다음과 같은 변경 사항을 시행했습니다ServerCore 의 Types.h 의 #define _STOMP 를 주석처리위와 같이 할 경우 발생하는 GSessionManager, GRoom 생성 관련 에러를 해결하기 위해 실제 객체를 Main 에서 생성하도록 수정DummyClient 에서 대량의 클라이언트(3000 개)를 만들도록 변경이후 서버를 켜면, 잠시 후 MemoryPool::Pop 에서 익셉션이 발생합니다.다음과 같은 환경에서 실행중입니다비주얼 스튜디오 2019Release, x64혹시 강사님도 동일한 문제가 발생하는지, 발생한다면 원인과 해결 방법을 알려주실 수 있을까요? 감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트 이동키 입력시 처리방법
안녕하세요 선생님동영상 강의를 다보고 탑뷰, PVP, 논타겟 슈팅 게임을 만들고 있습니다.그러다 이동키 관련되서 궁금한점이 생겨 질문드립니다.w,a,s,d를 이용하여 캐릭터의 이동처리를 하는데 클라이언트 프레임이 60프레임이라고 했을때 프레임마다 패킷을 서버에 보내는것은 아닌것 같았습니다. 이거에 대한 여러가지 시도를 해봤는데 결과적으로 만족스럽지않았고 삽질만 하게 되었습니다. 이거에 대한 해결방법이 있을까요?