묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lockguard에 있는 mutex를 포인터로 안할 때
delete 되어있다...
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이번에 진행하는 Lyra 멘토링 강좌 질문 있습니다.
중간에 끼어들어 2개월차 멘토링에 신청하게 되었는데, 1개월차 내용도 들을 수 있는 건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼 서버 연동 강의 질문
안녕하세요 루키스님qna 게시판을 보다가 루키스님이 주말마다 언리얼 클라이언트 연동 강의를 주말마다 진행하고 계신다는 글을 봤는데 혹시 멘토링으로 진행하시는 건가요?만약 진행 중이시라면 지금이라도 참여할 수 있을까요?강의로 촬영하고 계신 거면 언제쯤 출시되는지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
acceptex 함수 성능에 관련해서 질문이 있습니다.
acceptex 함수를 사용하면 accept 쓰레드를 하나 만들어서 사용하는 거에 비해서 확실하게 성능 이득을 보는편인지 궁금합니다. 제 생각은 그렇게 차이가 심하게 날거라고 생각이 안 들거든요.왜냐면, acceptex를 사용하면 그만큼 IOCP WorkThread 부담을 줄거라고 생각이 들고요, 그리고 소켓 풀로부터 어느 만큼 미리 만들어서 등록을 시켜줘야할지도 관건이 되겠고.. 결국 그 소켓 풀로 만드는 것도 풀이 비어 있으면 만드는 비용도 들어서 그렇게 큰 기대 효과를 못 볼거라고 생각이 들어서요. 그래서 결국 accept만 하는 스레드를 따로 빼서하는 것도 괜찮은 방법이라고 생각이 들거든요. 이 부분에 관해서 어떻게 생각을 하시는지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
WSASend는 낚시대 다시 안던져도 되나요?
WSASend는 다시호출 안해줘도 되는건가요? 그리고 만약 보낸 데이터 그대로 다시보낼때 이런식으로 만들면 될까요??
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
20분35초 Broadcast 관련 질문 입니다.
안녕하세요. Broadcast에서 패킷을 보낼 때 마다 컨텍스트 스위칭이 일어난다 하신게 이해가 어렵습니다.현재 코드에서 GameRoom이 JobSerializer의 상속을 받아서 모든 행동을 큐에 넣고 특정 타이밍에 현재 쌓여있는 큐에 있는 내용을 실행합니다.특정 타이밍에 GameRoom을 Flush하려고 접근한 스레드가 쌓여있는 큐에 있는 행동을 모두 수행하면서 쌓여있는 Broadcast들도 모두 수행하는데, 여기서 어떻게 컨텍스트 스위칭이 일어나는지 모르겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Lock-Free Stack #3에서 질문이 있습니다.
IncreaseHeadCount 부분에서 CountedNodePtr newCounter = _oldCounter 를 해주는데 newCounter 같은 경우 지역변수이기 때문에 애초에 경합이 발생할 수 없지 않나요? int 변수를 공유하는 것도 아니고 완전히 새로운 지역 변수이기 때문에 좀 이해가 안됩니다. 오히려 oldCounter를 바꿔주기 위해서 head.compare_exchange_strong을 하는거 아닌가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
7:33 코어 개수 만큼 일을 시키는 이유
뭔가 스레드 100개 1000개를 만들면 뭔가 더빠를거 같은느낌인데 코어 개수 보다 더 많은 스레드를 만들 시 컨택 스위칭이 일어나서 효율 적이지 않아 코어 개수 만큼 만드는 건가요?!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
듣기 전 파트 1을 들으면 들을 수 있을까요?
안녕하세요 4게임서버는 c++을 알고 있어야 한다고 하는데 혹시 파트 1 c++을 들으면 4게임서버를 들을 정도는 될까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
reserved 공간은 뭘 위해서 만들어둔건가요??
reserved 4비트 공간은 왜존재 하는건가요? 그냥 64비트로 존재하게 냅두면 비트쉬프트를 하지않아도 될텐데 라는 의문이 들었습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 풀 할당 반복문 오류가 있는거 같습니다.
1024를 넘어서도 32씩 증가를하고 다른분이 올리신거같은데 세번째 반복문에 이상이있는지 끝이 NULL로 세팅되는 오류가 있습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
shared_ptr질문
shared_ptr에도 레퍼런스 카운트 블록안에 weak값이 존재하고 shared_ptr타고 들어가서 보니 shared_ptr도 weak가 0이될때 그제서야카운트 블록을 날려주는거 같은데. 만약 shared_ptr에 weak가 0이 되지 않는상황이 오면 계속 남아있을거 같은데 shared_ptr에서는 weak가 절대0이상이 될수가 없는건가요??weakCount는 weak_ptr로만 늘려줄수 있어서 상관이 없는걸까요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
LockFree를 실제로 쓰긴쓰나요?
엄청 복잡하기도하고 버그 발생 여지도 많을거같은데 그냥 mutex쓰는게 좋은거 아닌가요?? Lockfree 만의 장점이 있나요? 실무에선 어떻게 활용하는지 궁금합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Lock Free Stack #1강의에서 atomic 헤더없이 사용 가능한 이유?
강의 시간 02:07atomic타입으로 Node 포인터 변수를 선언 했는데 <atomic> 헤더를 선언하지않았는데 빌드가 잘되던데 왜그런건가요??미리 컴파일된 헤더나 mutex안에 atomic이 있지도 않은데 말이죠.. 아직 c++ 이 많이 익숙치 않아 질문남깁니다. ㅜㅜ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
CAS 질문 strong vs weak
스핀락 시간에는 strong을 사용하고 이번엔 weak를 사용했는데 이유가 있나요?? compare_exchange_strongcompare_exchange_weak
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Cannot resolve destination host 오류가 뜹니다
AccountServer #2 강좌에서 유니티 클라와 웹서버 연동 테스트하는 부분이 있는데테스트로 GameScene에다가 다음 두줄을 넣고 테스트하는 부분입니다. Managers.Web.BaseUrl = "https://localhost.5001/api"; WebPacket.SendCreateAccount("AAA", "1234"); 브레이크 걸고 확인해보니 웹서버에는 CreateAccount([FromBody] CreateAccountPacketReq req)가 실행조차 되지 않았습니다.웹서버에 연결 자체가 안되는 것 같은데 구글에 쳐봐도 잘 모르겠고어디가 문제인지 모르겠습니다.심지어 웹서버쪽 코드와 유니티쪽 WebManager.cs, Webpacket.cs 코드는 죄다 복붙으로 만들어서 오타가 있을 리가 없을텐데...로그가 생긴 함수는 다음과 같습니다.uwr.isNetworkError가 true라서 로그가 발생했습니다. IEnumerator CoSendWebRequest<T>(string url, string method, object obj, Action<T> res) { string sendUrl = $"{BaseUrl}/{url}"; byte[] jsonBytes = null; if (obj != null) { string jsonStr = JsonUtility.ToJson(obj); jsonBytes = Encoding.UTF8.GetBytes(jsonStr); } using (var uwr = new UnityWebRequest(sendUrl, method)) { uwr.uploadHandler = new UploadHandlerRaw(jsonBytes); uwr.downloadHandler = new DownloadHandlerBuffer(); uwr.SetRequestHeader("Content-Type", "application/json"); yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { T resObj = JsonUtility.FromJson<T>(uwr.downloadHandler.text); res.Invoke(resObj); } } } 유니티 로그는 다음과 같습니다. Cannot resolve destination hostUnityEngine.Debug:Log (object)WebManager/<CoSendWebRequest>d__5`1<CreateAccountPacketRes>:MoveNext () (at Assets/Scripts/Managers/Contents/WebManager.cs:46)UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼 클라이언트와 tcp 연동에 대해 질문있습니다.
강의 tcp 서버 실습 강의를 보고 dummyclient 에서 작성한 코드를 바탕으로 언리얼엔진과 간단히 연동을 해보려 하는데 언리얼 c++에서 어디 클래스 부분에 코드를 붙여야 할 지 감이 안잡혀 질문 드립니다. 기본 빈 클래스에 FRunnable 상속을 받아 진행해봤는데 빌드하는 부분에서 자꾸 오류가 떠서 막막하네요 ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Dfs 함수의 순방향 간선 예외 체크 로직에 대해 여쭤봅니다.
Dfs 함수에서if(_discoveredOrder[here] < _discoveredOrder[there]) contiue;해당 로직을 통해서 순방향 간선이면 continue를 하여 넘어갔는데 해당 if 문에 걸리는 경우가 존재하나요??_discoveredOrder[there]의 값이 -1이 아니라는 뜻은 자신의 부모로부터 이미 방문한 적이 있다는 뜻인데 if 문에 걸리는 것이 없는 것 같아서요. 어떤 경우에 발생하는 지 궁금합니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TypeList 수집 관련 질문
영상 구현에서는 TypeList를 직접 작성 했는데 실제 사용에서는 inheritance hierarchy를 탐색해서 TypeList를 생성해야 할 것 같다는 생각이 듭니다.일단 template meta programming을 잘 다루지 않아서 hierarchy를 어떻게 수집 할 수 있을지도 감이 오지 않네요.수집이 가능하다 해도 hierarchy가 크다면 hierarchy tree의 클래스 개수 n^2 만큼의 메모리를 점유하게 될 텐데 해당 부분도 우려가 됩니다.메모리 문제를 해결하기 위해서 _typeId 초기화 시점에 parent id도 추가적으로 선언+초기화하고 런타임 비용을 조금 더 쓰더라도 id를 hierarchy를 따라 올라가서 casting 가능 여부를 판단하는 방식은 어떨까요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼에서 소켓 연결 관련 전역 객체의 생성 질문
안녕하세요 강사님강사님의 강의를 들으며 게임 서버 개발자를 꿈꾸는 학생입니다.다름이 아니라 이번에 프로젝트를 진행할 기회가 생겨서 언리얼 클라와 IOCP 서버를 연동해 게임을 만드려고 합니다.이때 클라측에선 네트워크 스레드를 별도로 두어 패킷의 송수신을 담당하도록 하고 수신받은 데이터를 전역에서 존재하는 큐를 여러개 두어(인게임 패킷만 다루는 큐, 로비에서의 패킷만 다루는 큐 등) 여기에 밀어주도록 하고 메인 스레드에서 이를 락을 걸어 뽑아서 쓰는 형식으로 구현할 계획입니다.여기서 궁금한 점이 이런 소켓 연결 관련 객체와 글로벌 큐를 어느 위치에서 가지고 있어야 하는지입니다. 전역으로 사용하고 연결이 끊기면 안되므로 Game Instance를 생각하고 있습니다만 더욱 좋은 방법이 있는지 강사님께 여쭤보고 싶습니다. 읽어주셔서 감사합니다!