월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Unity Server 관련해서 질문이 있습니다.
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 안녕하세요. 현재 진행중인 프로젝트에서 TCP 네트워크 파트를 담당하게 되어 구글링하며 구현하다가 가뭄에 단비같은 강사님 강의를 찾게되어 열공하고 있습니다. 먼저 질문에 앞서 좋은 강의 올려주셔서 감사드립니다. 현재 프로젝트는 Unity 가상 시뮬레이터 개발로 Unity에서 생성된 시뮬레이팅 데이터를 다른 Uninty Clinet에 실시간으로 전송하여 Client 에서 통신을 통해 전달 받은 데이터를 기반으로 객체들의 Position 및 여러 상태값을 동기화 하는 작업입니다. 그래서 강의를 보기 전 제가 임시로 구현했던 방식은 Unity 시뮬레이터에 Server 코드가 같이 존재하여 시뮬레이터가 실행됨과 동시에 Server가 멀티스레드로 실행되고 Queue를 통해 생성된 데이터를 직접적으로 받아 Client에 뿌리는 방식으로 구현이 되어 있는데 강의를 보니 Server는 Unity 환경이 아니라 따로 실행을 하시고 Client만 Unity로 작성하여 진행하시더라구요. 저희 프로젝트는 가상 시뮬레이터이다 보니 최대한 빠르게 데이터를 Client에 전송해 동기화된 움직임을 제공하여야 하는데 이럴 경우에도 Server를 따로 두고 시뮬레이터도 하나의 Client로 붙이는게 맞는 구조일까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
해당 소스코드 파일에 대해서
안녕하세요. 좋은 강의 감사합니다. 한가지 질문이 있습니다만, 해당 소스코드 파일은 어디에서 다운받을 수 있는지요? 답변 부탁드립니다 ^^
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Thread, ThreadPool, Task 확인 부탁드립니다.
Thread, ThreadPool, Task에 대해 정리를 해봤습니다. 그 전에 한가지 질문 먼저 드립니다. Task를 생성할 때 new를 사용하는데 new의 의미가 ThreadPool을 하나 더 생성하는 것이 아닌 ThreadPool안에서 돌 Thread를 하나 생성하는 것인가요? 아래 정리는 위 질문에서 Thread가 생성된다는 가정 하에 정리해봤습니다. * Thread는 일꾼 하나이며 ThreadPool은 그 일꾼들이 있는 인력 사무소이다. Task는 인력 사무소에 일감(짧은 작업/긴 작업)을 정해주기 때문에 Task는 하나의 ThreadPool로 생각하자. * 일반적인 Thread는 개인이 관리해야하며 생성작업이 무겁고 많은 쓰레드를 사용해야 하는 경우 관리가 어렵고 효율적이지 않다. * 그래서 쓰레드를 미리 만들어 놓고 돌려쓰는 Pool 방식을 붙여 쓰레드르 사용하는 방법인 ThreadPool을 사용한다. * 돌려 쓰기 때문에 보통 가벼운 작업을 많이 시킨다. * 그래서 놀고 있는 놈과 일하는 놈의 갯수를 잘 관리 해야한다. * 지속적으로 일해야 하는 무거운 일감을 모든 Pool이 가지고 있으면 프로그램이 먹통된다. * 이런 단점을 보완한 것이 Task. * 그냥 ThreadPool만 사용하면 일의 무게를 명확히 정해줄 수 없으나 Task를 사용하면 각 Task마다 일의 무게를 정해줄 수 있다. 이렇게 정리를 해봤는데 혹시 틀린 부분이 있다면 알려주시기 바랍니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Packet Queue 질문
안녕하세요. "Rookiss"님, Packet Queue에 대해서 질문드리려고 합니다. Push() 에 대해서는 BackGround Thread가 계속 Push하므로 lock을 거는 이유가 맞다고 생각되는데 Pop()에 대해서는 Unity의 Main-Thread만 사용한다면 따로 lock을 걸 필요가 없다고 생각되는데 혹시 다른 이유가 있어서 lock을 거신건가요?? 답변해주시면 감사하겠습니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Unity 정책 + DLL 사용 질문
안녕하세요. "Rookiss"님, 해당 강의를 듣고 Unity의 정책으로 TryWriteBytes()와 Span<> 사용이 불가능하다는 부분에서 궁금한 점이 생겼습니다. "Rookiss"님이 말씀하신 TryWriteBytes()와 Span<> 사용이 불가능하여 해결방안으로 1. unsafe code 사용 2. 직접 bit 연산 이 있다고 하셨는데 실제로 1, 2 방법의 현업에서 사용 빈도가 궁금합니다. --- 1번 질문 그리고 ServerCore의 class들을 DLL Import로 사용 가능하다고 하셨는데 그러면 TryWriteBytes(), Span<> 등을 class library의 DLL로 import하면 사용이 가능할까요?? --- 2번 질문 마지막으로, 만약 2번 질문이 가능하다면 실제 현업에서 공통된 Packet class들을 dll로 import해서 사용하나요??? --- 3번 질문 답변해주시면 감사하겠습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
exe 파일 생성 안됨.
exe 파일만 생성이 안되네요...
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
객체지향적으로 코딩할 때 트랜잭션 스크립트 방식과 도메인 모델 방식 중 어떤 것을 사용하시나요 ?
안녕하세요 강사님. 객체지향적에 대해서 학습하는 도중에 객체지향적으로 코딩하는 스타일로 트랜잭션 스크립트 방식과 도메인 모델 방식으로 코딩하는 스타일이 있다는 것을 알게되었는데요. 혹시 강사님은 어떤 방식으로 코딩을 하시는지 여쭤봐두 될까요 ?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Disconnect에 관한 질문입니당
빨간색으로 동그라미 쳐진부분을 제가 실수로 누락해서 프로그램을 실행하니 이와 같이 삭제된 개체에 액세스 할수 없다고 에러가 나옵니다. 그래서 Thread.Sleep()안의 시간을 100 10 1 0으로 줄여봣는데 1일때까지는 에러가 안나오는데 0부터 에러가 나오더라구요 말그대로 삭제된 개체에 어떤 작업을 하여서 에러가 나오는건데 프로그램의 흐름이 어떤 과정으로 진행되어서 이렇게 됏는지 파악이 잘안되서 답답한 마음에 이렇게 질문 남깁니다. ㅠㅠ
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ThreadPool의 Thread 갯수
[쓰레드 생성] 강의에서 ThreadPool은 인력사무소 느낌이라고 하셧고, 단점으로는 '제한적인 쓰레드 갯수 때문에 만약 오래걸리는 일로 제한적인 쓰레드들이 전부 묶이게 된다면 추가적인 일처리를 할 수 없다.' 라고 이해를 했습니다. 그러면 ThreadPool 에서의 Thread 갯수는 컴퓨터 마다 다른건가요?
- [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
블로그 필기
삭제된 글입니다
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
전체 정리 중 이해가 어려운 부분이 있습니다 ㅠ
제가 이해력이 부족해서 계속 정리해보고 넘어가느라 자꾸 질문을 드려서 죄송합니다...ㅠㅠ 전체적인 틀이 궁금한데 서로 연결이 되는 부분이 이해가 잘 안되었습니다! 메일로 사진 첨부하여 보내드렸습니다! 1. 아래와 같이 이해를 해도 될까요?? 혹시 틀린 부분이 있다면 알려주세요! 2. Socket 안에 Buffer가 들어있는 개념일까요? 아니면 Buffer를 개별로 따로 봐야할까요?? 3. Buffer = Queue 가 맞을까요?? 4. 결국에 이런 스크립트를 작성하는 이유는 서버와 클라이언트가 '패킷'을 주고 받는 것이 궁극적 목표인가요? 5. 4번의 목표(패킷의 송수신)를 좀 더 간편하게 하기위해 packet Generator를 한게 맞을까요? 6. packet 직렬화를 하지 않고는 패킷 송수신이 불가능 할까요(바이트 단위로 변화하는 작업은 필수 일까요??)?? 7. packet Manager에서 OnSendPacket가 필요 없는 이유를 알 수 있을까요?? 항상 감사드립니다..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SESSION 생성 문의 드립니다.
안녕하세요. 우선 좋은 강의 감사합니다. client 프로그램에서 connect를 10개 시도하는데 session이 이상하게 많이 생깁니다. 해당 원인에 대해서 알 수 있을까요?? socket connect되지 않은 session으로 Send를 시도하면서 Exception이 발생해서 console 로그를 찍어보니 그림1과 같이 sokcet 10개 생성전에 여러 session이 생성 됩니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버쪽 OnRecvCompleted에 SocketError.ConnectionReset
프로그램을 실행한 뒤에 조금 시간이 지난 뒤에 서버 쪽 OnRecvCompleted 함수에서는args.BytesTransferred는 0, args.SocketError는 SocketError.ConnectionReset이 뜨고 클라이언트 쪽 OnRecvCompleted 함수에서는args.BytesTransferred는 0, args.SocketError는 SocketError.Success가 뜨면서 서로 Disconnect가 됩니다.... 코드를 확인해봤을 때는 강의에 적은 것이라 동일한 것으로 확인이 되는데 혹시 다른 이유가 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
제가 잘 이해한건지 잘모르겠습니다!
안녕하세요 강사님 제가 이해한부분이 맞는지 확인해주세요! ServerCore는 약간? 서버의 핵심 같은 부분이고, 컨텐츠를 제외한 부분. 그중에 Session이라는 부분은 뇌? 같은 부분이고 Connector와 Listener라는 팔과 다리를 움직여 주는 부분일까요?? 그리고 이렇게 정리하는 부분은 가시성과 목적을 나누기 위해서 일까요?? 항상 감사드립니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
웹서버 질문이 있습니다
약간 별개의 질문이긴한데요 현재 언리얼에서 플레이펩이라는 클라우드 웹서버로 방치형 키우기 게임을 위해 사용중입니다. 웹서버가 제공하는 API로 UpdatePlayerData: 클라의 변수를 서버로 업로드 ExecuteCloudScript: 클라우드 스크립트 실행 이렇게 두개의 함수가 있는데요 방치게임의 공격력 레벨을 업그레이드 한다고 했을때 Update와Exec중 Exec로 서버에서 플레이어 데이터를 처리해야 치트,핵유저를 방지할수있을까요? 사실상 대부분의 게임기능이 CloudScript를 사용해야하는것인가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SpinLock 강의 중 이해가 안되는 부분이 있어 질문드립니다.
안녕하세요 SpinLock 강의를 듣다 이해가 안되는점이 있어 질문드립니다 SpinLock 강의 4분 30초쯤에 Thread_1 함수와 Thread_2 함수를 정의했고 Thread_1 함수는 for(int i=0;i<i<100000;i++) { _lock.Acquire(); _num++; _lock.relaese(): } Thread_2 함수는 for(int i=0;i<i<100000;i++) { _lock.Acquire(); _num--; _lock.relaese(): } 이렇게 되어있는데 여기서 이해가 안되는 점이 race condition에 의해 실행 순서가 예측이 불가능할 뿐이지 결국 Thread_1 함수의 for문 num++이 10만번 실행되고 Thread_2 함수의 for문 num--이 10만번 실행되는건 똑같으니까 10만 - 10만 = 0 이 나와야 된다 생각했지만 실제로는 0이 안되고 강의에서는 -8914로 나오는지 이해가 안됩니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener관련 질문
다시 정주행하며 복습 중에 Listener 관련하여 궁금한게 있어서 여기에 질문합니다. private void RegisterAccept(SocketAsyncEventArgs eventArgs) { eventArgs.AcceptSocket = null; try { bool pending = _listeningSocket.AcceptAsync(eventArgs); if (pending == false) OnAcceptCompleted(null, eventArgs); } catch(Exception e) { Console.WriteLine(e); } } public void OnAcceptCompleted(object sender, SocketAsyncEventArgs eventArgs) { try { if (eventArgs.SocketError == SocketError.Success) { Session session = _sessionFactory.Invoke(); session.Start(eventArgs.AcceptSocket); session.OnConnected(eventArgs.AcceptSocket.RemoteEndPoint); } else Console.WriteLine(eventArgs.SocketError.ToString()); } catch(Exception e) { Console.WriteLine(e); } RegisterAccept(eventArgs); } 1. 비정상적인 접속이라거나 그런 경우로 인해eventArgs.Completed 가 호출이 안되는 경우가 생길 수 있는지 궁금합니다. 그런 접속이 많아지면 결국 Listener가 다 꺼져버리지 않을까 걱정됩니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷모아보내기 궁금해서 올립니다.
패킷을 모아보내는 현상이 자주 일어난다는것은 데이터를 보내는쪽 데이터 단위가 커서 부하가 심하다는건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 베리어 문의
강사님 그렇다면 왠만한 경우에 메모리 배리어를 다 써주면 되겠네요?? 많이 쓰면 부하가 걸린다거나 하는 부작용은 없을까요??
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
release로 디버깅 시작 후 오류
강사님 디버깅하는데 아래와 같은 오류가 발행하는데 구글링으로 해결해 보려고했는데 visualstudio버전이 달라서 해결하는법을 못 찾았습니다. ㅠㅠ 확인부탁드립니다!