월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue 관련해서 질문있습니다 !
전에 드렸던 질문의 연장이지만.. 한 공간에 많은 유저가 몰려있어 각자의 위치동기화를 위해 주변 플레이어들에게 Broadcast 하는 상황이라고 가정할때강의에서 말씀하신 JobQueue 구조로 간다고 해도연속된 위치동기화를 위해 Broadcast Job 을 계속해서 수행한다고 하면 사실상 Broadcast 내의에서 Session을 접근할때의 Lock 때문에 기다려야 하는 현상은 동일한것 아닌가 궁금합니다.만약 제가 JobQueue 에 대해 놓친부분이 있다면 리마인드 해주시면 너무너무 감사드리겠습니다 !!!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 이번 강의에 궁금한 점이 있어 질문 드립니다.
TryDelete에서 popCount를 검사하는 부분에서 이중으로 검사하는 이유가 정말 궁금합니다. 혹시나 다른 수강생도 궁금하셨을까 싶어 찾아보니 이미 질문주신 분이 있어 답변을 보았습니다. 다만 popcount가 1인 것을 검사하고 펜딩 리스트를 분리까지 하였다면 그 이후에 다른 스레드가 어떤 식으로 참견하여도 delete에 방해가 될 수 없다는 생각이 자꾸 듭니다. 분리 이후엔 사실상 popCount가 의미가 없는 것이 아닌지 여쭙고 싶습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 커리큘럼 관련되서 질문 드립니다.(커리큘럼 관련되서 질문할 곳을 찾지 못해서 ㅠㅠ 여기다 올린점 양해 부탁드려요 ㅠ)
안녕하세요. 커리큘럼 관련되서 질문드리고자 이렇게 글 올립니다. 저는 일단 C++을 사용하는데 있어 큰 무리없이 사용하는 편입니다. (modern c++포함) 반면 C#은 거의 모르는 상태인데요, 강사님 커리큘럼중에 C#을 이용해서 MMORPG를 만드는 커리큘럼도 있던데 아래처럼 병행해서 커리큘럼을 짜도 될지 궁금해서 문의 드립니다. [C#과 유니티로 만드는 MMORPG게임 개발시리즈] Part1, Part3, Part7, Part9 만 듣고, [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4 이렇게 들어서 일단 Unreal 로 연동하는 강의가 나올때까지, 유니티 2D게임을 C++게임서버에 연동해보고 싶은데요, 굳이 C# 게임서버 제작 강의를 들어야할 필요가 있을까요?? C#으로 게임서버를 만들어야겠다는 생각이 들면 듣겠지만, 지금은 우선 게임 클라이언트 자체를 서버에 연동시키는것(구체적으로 맵을 어떻게 서버에서 처리하고, 스킬이나 hit 판정을 어떤식으로 하는지에 대한 것들)을 목표로 하고 있는데, C#게임서버 강의랑 C++ 게임서버 강의가 겹치는 부분이 많아서 C#게임서버 강의를 통해 들어야할지 고민이 됩니다. 결론으로 C# 강의 Part1, Part3, Part7, Part9 와 C++강의 Part4 이렇게 병행하는데, 무리 없이 커리큘럼을 수행할 수 있는지 궁금합니다. 긴글 읽어주셔서 감사드리며, 항상 좋은 강의 올려주셔서 감사합니다.!!!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RecvBuffer 강의 handle Error
handle Error 10014가 뜹니다 msdn 찾아보니 주소.? 버퍼 사이즈가 잘못되었다고 하는데 어느 부분에서 잘못된건지 못찾겠습니다 코드 비교해보면서 찾는데 안찾아지네요.. 어느 부분을 찾아보는게 좋을까요 흑흑 아 그리고 올려주신 파일은 실행하면 이런 오류가 뜨는데 이건 왜그러는걸까요.. ㅜㅜㅜ 파일 경로가 달라서 그런거같은데 맞나요
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리풀, 오브젝트풀 강의 관련 궁금한 점이 있습니다.
바쁘신 와중에 항상 답변해주셔서 정말 정말 감사드립니다.. 이번 강의를 보고 궁금한 점이 여러 개 생겼는데 depth : 16; sequence : 48; reserved : 4; next : 60; 이번에 나온 SList 관련해서 위처럼 쓰인 코드를 처음봤는데 어떤 의미로 쓰이는 것인지 궁금합니다. 메모리풀에서 push를 할 때 메모리풀이 보통 실제로 메모리풀에서 pop된 데이터인지 아닌지를 검사하는 것을 메모리풀 수준에서 검사하지는 않나요? 락프리 스택이나 락프리 큐, 메모리풀 등을 구현하여 사용할 때 보통 테스트는 어떻게 하는지 궁금합니다. 제 수준에서 기껏해야 순회 함수를 만들어서 push, pop된 데이터를 일일이 확인해보거나 push , pop을 많이 수행한 이후 실제로 데이터의 갯수가 올바르게 들어갔는지 확인하는 정도밖에 생각이 안나느데 혹시 조언해주실만한 테스트 방법이 있을까요..?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
placement new 에러가 납니다 ㅠㅠ
이런 식으로 실제로는 하나의 인수만 사용하고 있는데도 2개의 인수를 사용한다는 에러가 뜹니다.. 강사님 코드를 복붙을 하여도 새로운 프로젝트를 만들어도 똑같이 떠서.. 따로 opearator new를 정의하면 컴파일 에러가 없어지기야 하지만 의미가 없고.. 이런 간단한 것조차 질문드려서 정말 죄송하지만 예전에 가끔 placement new를 사용할 땐 문제가 없었는데 왜 이러는지 도저히 해결할 수가 없어서 죄송하지만 질문 드려봅니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티스레드에서 shared_ptr에 대해서 주의해야 될 점은 없나요?
c++ 레퍼런스에 shared_ptr에 대해서 스레드 안전하다고 나와있긴한데 이렇게 shared_ptr을 멀티스레드 환경에서 사용하면서 신경써야 될 점은 없는건가요? 그렇다면 저희가 예전에 refcountable 클래스는 왜 만든 것인지도 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TypeCast 강의에서 궁금한 부분이 있습니다
typename을 붙이는 이유가 뭘까요? 뒤에 TypeAt<TypeList<Tail...>, index - 1>::Result <- 이 부분이 타입이라는걸 그냥 설명해주기 위함일까요.?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요
이번 실습에서 컴플리션 포트로 넘겨주는 장치키로 세션의 주소를 사용하고 있는데 실제로 실무에선 장치키로 어떤 값을 사용하는지 정말 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 궁금한 점이 있어 질문 드립니다
1. 소켓 송수신 버퍼가 실제로 TCP 단에서 다루는 버퍼가 되는 것인가요? 2. send() 함수가 실패하는 경우는 송신 버퍼가 가득 차는 경우인데 수신 측에서 recv를 하지 않는 경우를 제외하고 어떤 경우에 실패하는지 너무 궁금합니다. 3. 실제로 유저 애플리케이션 계층에서 송신 데이터가 많다고 할 때 TCP가 어느 정도 속도로 송신버퍼를 비우는지(얼마나 빨리 보내주는지) 알기 위해서 어떤 정보를 확인해야 될까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 풀 할당 사이즈 관련
MemoryPool* pool = new MemoryPool(size) 부분에서 할당 메모리 크기인 size가 각 for문 마다 고정되어야 한다고 생각했습니다. 그런데 강의 코드에서는 아래와 같이 size가 for loop를 한번 돌 때 마다 늘어나더라고요. Memory::Memory() { int32 size = 0; int32 tableIndex = 0; for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 2048; size += 128) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 4096; size += 256) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } } 제가 강의를 듣고 생각한건 0~1024 byte까지는 32 byte단위, ~2048 byte까지 128 btye단위, ~4096 byte까지 256 byte단위로 할당 한다고 생각했거든요. 근데 위 코드에서 첫번째 for문을 예를 들면 처음에는 Memory Pool을 32 byte 사이즈로 할당하는데 그다음에는 64 byte, 그다음은 96 byte ... 로 할당 사이즈가 점진적으로 증가하더라고요. 저는 1024 byte까지는 32byte로 쭉 하다가, 1024 byte부터 128 byte 단위로 할당할것이라고 생각했습니다. 그래서 저는 아래와 같은 식으로 되어야 하지 않을까 생각했습니다. Memory::Memory() { int32 size = 0; int32 tableIndex = 0; for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(32); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 2048; size += 128) { MemoryPool* pool = new MemoryPool(128); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 4096; size += 256) { MemoryPool* pool = new MemoryPool(256); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } } 제가 이해하지 못한 부분이 어떤것인지 알고 싶습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SLIST_HEADER 관련
SLIST_HEADER의 NextEntry 변수 중 Reserved라는 4비트짜리 변수의 쓰임새가 궁금합니다. 64비트 주소의 하위 4비트를 아껴서 Reserved 변수가 쓸 공간을 만드는건 이해했습니다. 그런데 그렇게 아껴서 만들어낸 4비트라는 공간을 Reserved는 어떻게 활용하는 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리풀 강의에서 궁금한 점이 있습니다
Memory.cpp파일 memory 생성자의 for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } 부분이 이해가 안되는데요 for문에서 size가 32씩 증가하면 pool이 두번째는 64바이트로 세번째는 96바이트로 만들어지는건데 이게 맞는건가요? 1024까지를 32바이트 크기로 쪼개 32개 2048까지를 128바이트 크기로 쪼개 8개 4096까지를 256바이트 크기로 쪼개 8개 총 48개가 된다고 이해했는데 그러면 세개의 for문 속 new MemoryPool(size)의 size를 각 32 128 256으로 해야 하는 것이 아닌지.. 하는 의문이 듭니다 어느 부분에서 잘못 이해했는지 모르겠습니다 ㅜㅜ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
특정 클래스에서만 Atomic을 써서 관리하는 이유가 궁금합니다
MemoryPool에선 관리하는 변수들을 Atomic으로 관리하셨는데 Send,Recv Buffer나 Session에서는 아토믹없이 내부에서 int형만으로 처리하는걸 보고 궁금증이 생겼습니다. 메모리풀뿐만 아니라 세션이나 send,recvBuffer에서도 멀티쓰레드를 통해 처리되지 않나요? 아토믹 변수를 쓰시는 철학(?), 어떤 배경에서 쓰실 생각을 하셨는지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 직렬화 관련 질문있습니다 !
수업에서 사용했던 Protobuf 외에 Json 으로도 우리 서버에서 실습을 해보고 싶습니다 !!혹시 Json 으로 패킷 직렬화를 사용하려면, 1) 라이브러리는 어느걸 사용해야 하나요 ?2) 라이브러리 적용 및 사용 관련된 문서나 간단한 가이드가 있을까요 ?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이 환경설정 방법을 통채로 다 외워야하나요???
타 강의와 궤를 달리하는 어마어마한 복잡함인데 이걸 다 외워야하나요... 아 그리고 바이너리 폴더안데 .ilk? 파일이 저는 안생기는데 문제가 생기나요 라이브러리 폴더에는 또 .lib라고 또 하나가 더있네요 저는
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Broadcast 에 대해 질문 있습니다
void GameSessionManager::Broadcast(SendBufferRef sendBuffer) { WRITE_LOCK; for (GameSessionRef session : _sessions) { session->Send(sendBuffer); } } 만약 사용자가 엄청 많이 접속해 Session 도 그만큼 증가 하게 되었고, 모든 사용자가 위치동기화를 위해 나의 위치를 Broadcast 를 통해 실시간으로 지속해야 하는 상황에서 위 코드에서 WRITE_LOCK 때문에 병목현상이 일어날 수 있지 않을까 ? 라는 생각을 해봤습니다. 만약 일어날 경우, 이런부분을 조금이나마 해결할 수 있는 방법은 무엇이 있을까요 ?그렇지 않은 경우, 제가 학습에서 놓친 부분은 어떤 부분이 있을까요 ?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 혹시 루키스님 씨샵강의 맥용 비주얼 스튜디오2019에서도 가능한가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
분산 서버 구조에 대해서 질문있습니다 !
Session #3 를 공부하면서 서버에서 다른 서버로 Connection 을 실행하는 경우에 대해서 말씀하셨는데, 번외 이야기지만 갑자기 궁금해서 질문 드립니다.만약 서버가 10개 있다고 했을때HUB 처럼 연결고리 역할을 담당하는 서버 1개와 컨텐츠 서버 10개로 구조를 잡아서HUB 서버가 클라에서 보내는 패킷을 특정 정보값에 따라 원하는 서버에 정보를 대신 보내주는 구조로 분산처리 구조를 잡는 경우가 있을까요 ? 아니면 클라에서 서버1로 접속하면 서버1과 연결을 유지하고 서버2로 접속할시 다시 서버2와 연결을 유지하는 방식으로 분산처리 하나요 ?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 Event , CV 에서 차이점에 대해 질문드립니다
처음 윈도우 Event로 작성 시 이벤트 알림 -> Consumer 에서 이벤트 확인 -> Queue Pop 과정 사이에서 Lock이 안걸린 순간이 생기고, 이 때 Producer 가 실행 될 수 있어서 Queue 사이즈를 찍으면 늘어나는 현상이 발생했었는데요 Condition Variable로 작성한 코드에서도 Queue 사이즈가 늘어나는 이유가 위와 동일한가요? 그렇다면 이 문제는 처리 방법이 없을까요?