월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
공부 방법에 대해서 질문이 있습니다
안녕하십니까 게임 프로그래머 취업 가이드 영상을 보고 클라이언트쪽만 공부하다가 서버 공부를 시작하려고 하는 대학교 2학년생입니다.유니티와 언리얼강의 전체를 한번씩 보면서 어떤 느낌인지 파악하고 이해 안되는 강의를 계속 돌려보는 식으로 공부하려고 했습니다. 근데 제가 유니티 c#, 알고리즘, 엔진을 들을때는 괜찮았는데 게임서버 강의를 이제 1번 완강했는데 거의 부분적인 이해만 한것같고 전체의5%정도밖에 이해를 못했습니다.. 이게 다음파트로 넘어가는게 맞을까요? 아니면 이해갈때까지 서버강의를 계속 들어야할까요?조금이라도 이해가 더 될까봐 한빛아카데미 데이터 통신과 컴퓨터 네트워크 박기현 지음 이 이론책을 같이 보면서 공부중인데 이 두꺼운 이론책을 봐도 이 강의와의 접점을 못찾겠고 봐도 이해가 잘 안가는데 보는게 맞을까요? 아니면 시간낭비일까요..?강의 듣는 순서도 고민이 됩니다 유니티 강의보다 c++ 강의와 c++ 서버 강의를 듣고 유니티 강의로 넘어오는게 나을까요 아니면 지금 하는대로 유니티먼저듣고 c++강의로 넘어가는게 맞을까요?중구난방하게 글을 적은 느낌이라 죄송합니다 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
new List 동기화 와 관련하여..
public List<IPacket> PopAll(){ List<IPacket> list = new List<IPacket>(); lock(_lock) { ...어떤 처리.. }} 이 함수가 멀티 스레드로 실행 된다고 했을대 list 이 변수는 안에가 list 형태인데 linkedlist 같은것도 스레드 세이프 한건가요?여러개의 스레드가 linkedlist 를 생성만 한다고 했을때(위의 예시처럼 원소 추가나 조작 없이) 동시에 new 연산이 내부에서 실행 된다 여러개 스레드에서 동시에 힙에 new 연산이 실행될것 같은데(예를 들어 c++ vector<> 같은..) 멀티스레드로 new 연산시 같은 주소에 생성될 일이 발생할 수도 있지 않을까 해서요 질문을 요약하자면-지역변수에서 힙쪽의 new 를 생성하는게 있다면 그것은 스레드 세이프한가? 라는것이 질문입니다답변 부탁드려요!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 노가다작업..
패킷 작업이 노가다 같은데 좀 더 편한 방법 이있나요?protobuf 는 사용법만 좀 보긴 했는데 좀 더 편한가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
싱글 코어와 멀티 코어에 대해 질문드립니다.
안녕하세요. 싱글 코어와 멀티 코어에 대해 궁금한 점에 대해 질문드립니다.1.만약 제가 작성한 프로그램에서 멀티 쓰레드를 사용하더라도 사용하는 컴퓨터의 CPU가 싱글 코어 일 경우쓰레드를 사용할 때 컨텍스트 스위칭이 일어나기 떄문에 멀티 쓰레드를 사용하는 건 의미가 없는 게 맞을까요?2.반대로 멀티 코어인 컴퓨터에 단일 스레드 환경의 프로그램을 만들었을 경우 여러 코어를 사용하는 게 아닌 하나의 코어만 사용하게 되어 CPU의 성능을 제대로 활용 못하는 게 맞을까요? 실제 운영체제 환경에서는 제가 만든 프로그램 외 에도 백그라운드로 실행되는 프로그램들이 있어서 코어 하나만 사용하진 않겠지만 개념적으로 봤을 때 멀티 코어일 때 단일 쓰레드 환경의 프로그램이면 CPU 성능을 제대로 활용 못 하는 게 맞는 건지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReadOnlySpan 버전 문제
ReadOnlySpan<byte> s = new ReadOnlySpan<byte>(segment.Array, segment.Offset, segment.Count); 이 질이 오류가 난다고 강의에는 나오는데유니티 2021.3.4 버전을 쓰고 있는데 오류가 나지않는건 유니티에서 사용하고 있는 C# 버전때문인가요?ReadOnlySpan 은 C# 버전 몇부터 유니티에서 지원하는건지 설명이 잘 안나오는것 같은데 어디서 알수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
공유변수 아닌거 volatile
int expected는 volatile을 안걸어주셨는데 static이 아닌것들은 최적화대상이 아닌가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의에서 뜨는 에러가 뜨지 않습니다.
강의에선 GenPackets.cs의 Span계열에 오류가 뜨는데 저는 Span계열에 오류가 뜨지 않습니다. 그럴경우 그냥 진행해도 될까요???
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener와 Session 강의를 들으면서 정리한 개념이 맞는지 알고 싶습니다.
강의 잘 듣고 있습니다. 항상 좋은 강의 감사합니다.게임 클라이언트 프로그래머를 목표로 준비하고 있는 취준생입니다. 근래 업계에서 풀스택 혹은 클라이언트 작업을 진행하면서도 서버 쪽 기초 지식을 보유하고 있는 개발자를 높이 평가하고 있다고 느껴 서버 강의도 수강하게 되었습니다.지금까지 포폴을 준비하면서 동기 방식 혹은 비동기 방식을 구성할 때는 코루틴으로만 코드를 작성했다보니 비동기(Async) 방식을 보면서 좀 헷갈리는 부분들이 있어 복습하면서 정리해봤는데 정리한 개념이 맞는지 궁금해서 질문 남겨봅니다.질문으로는일단 Async로 구현한 이유는 강사님께서 중간에 설명해주신 일반 Send와 Receive 함수는 블로킹 계열이라 흐름을 막는다는 점 때문에 사용한 것으로 이해했습니다. 이 때 Resister(Send/Recv) 와 On(Send/Recv)Completed를 순환적으로 구성하여 작성한 이유가 쓰레드 환경에서 쓰레드가 하던 일을 교체할 때(Context Switching) 야기하는 오버헤드(교체할 때 발생하는 비용)를 감소하여 효율을 높이기 위해 일거리가 남아있다면 계속 그 일을 잡게하기 위한 작업이 맞는건가요 ? 저렇게 순환적으로 구성했을 때 혹시 한 쓰레드만 해당 작업을 진행하게 되어 오히려 효율적으로 떨어질 수도 있을 것 같다는 생각을 하게 되었는데, 유저수가 많은 MMORPG 서버에서도 저런식으로 작업을 진행하는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
인디 모바일 게임 출시
안녕하세요 선생님 너무 좋은 강의 감탄하며 잘 듣고 있습니다.저는 친구들과 함께 휴학하고 같이 지내며 모바일 캐주얼 게임을 시장에서 괜찮은 반응이 나올 때 가지 여러개를 출시하는 것을 목표로 강의를 듣고 있습니다.혹시 선생님께서는 기획, 디자인, 사운드를 제외하고 개발 인력에 3명을 쓸 수 있다면 세명이 어떤 방향으로 공부하는게 좋다고 생각하실까요? (한명은 컴공 3학년 1학기를 마쳤고, 나머지 둘은 알고리즘 자료구조 독학, 낮은 수준의 프로그램을 몇개 만들어본 수준입니다.)강의를 빠르게 회독하는 것과 병행해서 저희의 게임을 헤딩하면서 만들어 보는 것이 좋을까요?혹은 어디에 어떻게 헤딩해보거나 배우는게 장기적으로 준수한 퀄리티의 게임을 빠른 개발주기를 가지고 낼 수 있을지 너무나 궁금합니다.강의와 무관한 질문이 실례인 것을 알고 죄송하게 생각하지만 선생님의 고견이 정말 큰 도움이 될 수 있을 거라 확신해서 실례를 무릅쓰고 질문 드립니다.한번만 도와주세요 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 모아보내기 개수와 flushed 개수가 다른데 왜이런걸까요?
상황.1listen register 는 10, backlog 는 100 으로 해놨고connector 에서 Connect 할대도 100 으로 해놨습니다SendBuffer 의 크기는 public static int ChunkSize { get; set; } = 65535 * 100; 이고RecvBuffer _recvBuffer = new RecvBuffer(65535); 인데 어떤 부분이 문제일까요?.. 원본 jobTimer 코드 까지 실행하면 강의와 결과는 거의 같게 나옵니다만.. 상황 2 위 상황에서 서버 클라가 보내고 받는 데이터가Hello Server!Hello Server! I am 1 가 되고 서버 클라 간의 패킷 또한 정상적으로 받아지는건 확인했습니다그런데 리슨서버에서 register = 1, backlog = 1로 해놓고더미 클라이언트 쪽에선 Connector 로 2개의 클라가 접속하게 했을때 결과가 아래 처럼 나오고 있습니다,connector.Connect(endPoint, () => { return SessionManager.Instance.Generate(); } , 2 );코드를 수기로 처서 그런것 같기도 한데 어떤 부분에 문제를 의심해 볼 수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 Listner / Session 질문 있습니다.
내용이 많이 어려워서.. 일단 첫 번째 수강중에는 혼자 구현할수있는 정도는 안가고 따라쳐보려는 수준만 해보려고 하는데, 그래도 흐름정도는 파악 할 수 있어야 하지 않나 해서 이해해 보려 했으나 이해가 잘 안가는 부분이 있어서 질문 드립니다. string host = Dns.GetHostName(); IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777); _listener.Init(endPoint, OnAcceptHandler); Console.WriteLine("Listening..."); while (true) { }위의 Main부분에서 while부분이 텅 비었는데 실시간으로 돌아가면서 무언가의 입력을 받는게 잘 이해가 안됩니다.또 pending이란 뭔가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
채널과 룸
서버에서 보통 채널을 말하던데 룸과 채널이 같은건가요 다른 건가요?인식은 채널안에 룸이 있는것 같은데..채널은 보통 별도의 서버인가요? 소프트웨어적으로나 하드웨어 적으로 채널과 룸은 관리를 어떤 식으로 하는지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
심리스에 관하여..
11:51 분심리스관련해서 아이디어가 생각나서 혹시..아이디어.1(가정 : 몬스터라면 애초에 서버에서만 클라로 뿌려주면 되긴 하겠지만, 클라에서 몬스터 정보를 준다 가정할때..)몬스터, 스킬, 유저, 모든 사물에 잡큐를 하나씩 배치를 해주어서 심리스를 해결한다고 했는데즉 이 말은 동기화 되야 하는 데이터가 있을때 심리스라서 맵 단위로 잡큐가 존재 할수 없으니예를 들자면 플레이어가 있고 플레이어 근방에, A 라는 몬스터가 있는데 이 몬스터의 동작을 그 주변에 있는 몬스터들도 알아야 하는 정보라 할때 몬스터의 정보(어떤 변경사항이 있고 다른 유저가 알아야 하는정보)를 서버에 보내고플레이어 근방에 있는(대략 일정 변경의 반지름 또는 시야에 들어오는 공간분할 처리내에 있는 유저) 정도의 유저들(동기화 대상들)에게만해당 몬스터 정보를 뿌려주어 해서 몬스터,사물 기반으로 데이터를 전송하는 방식일까요?아이디어.2(서버에서 처리 되는 기준)서버기준으로 , 사물, 몬스터 등에 개별 잡큐가 존재1. 몬스터가 왔다갔다 하는 동작이 몬스터 개별 잡큐에 넣기만 하고 실행 하진 않는다2. 플레이어가 몬스터나 사물등 일정 거리 안의 시야뷰에 보인다면 해당 오브젝트 동기화 대상들간의 잡들을 실행 하면서 동기화 처리를 한다용어는 들어 보긴 했는데 설명을 듣다가 갑자기 생각이 떠올라서 적어 봅니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
string 은 멀티스레드에서 변경시 안전한가요?
c# 에서 string 은 멀티스레드에서 변경시 안전한가요?또는 멤버에 대입 했을때도 안전한가요?값 타입이고 immutable 이라 동기화 처리를 따로 해주지 않아도 괜찮은건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
자동화코드 정렬
강사님 안녕하세요!다름이 아니라 주석들이 많아서인지 강의에 나온것처럼 자동화로 GenPackets.cs를 만들면 코드 정렬이 깔끔하게 되지 않아서요.. 이 경우는 제가 막판에 다시 정리해주면 상관없는건지, 아니면 무조건적으로 자동화로 생성되었을 때부터 깔끔하게 정렬되게 해야하는건지 궁금합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
listenSocket.AcceptAsync 와 내부에서생성되는 스레드에 대하여..
질문이 https://inflearn.com/questions/238421이 질문과 유사한 질문이긴 한단계 더 들어가보자면..만약에 bool pending = _listenSocket.AcceptAsync(args); 이 구문이 실행 될때 동시에 여러 클라이언트에서 접속이 이뤄지면AcceptAsync 가 두번 실행 되면서내부적으로 스레드 두개가 돌아가는것 같은데(ex: AcceptAsync 가 한번 실행되고 완료 되지 않은 상태에서 곧바로 다시 AcceptAsync 가 호출 되는 경우)이렇게 되면 OnAcceptCompleted 함수가 멀티스레드 로 두개의 Completed 를 두개 실행한 것 처럼 두개의 함수가 동시에 돌아가게 되는것 아닌가요?(즉 동기화 처리가 필요해지는 상태)이렇게 되면 순서적으로 처리 되지 않을것은데왜 순서적으로 처리가 된다는 것인지 잘 이해가 안가는것 같습니다 async 계열들이 내부적으로 쓰레드로 돌아가는 것이라면 다른 것들도 마찬가지 일것 같은데요..답변 좀 부탁드리겠습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
OnRecvPacket 관련 질문
우선, 강의에 대해 너무 유익하고 많은걸 배우고 있어서 감사드립니다! PacketSession 강의 수강 중 강사님과 동일하게 반복문으로 더미 클라에서 5번을 send로 했지만.. 한번의 로그만 찍히고 disconnect 되고 있네요..심지어 그 하나의 로그도 id값이 잘못찍히구요 ㅠㅠ원인을 찾고 싶었지만.. 역부족이여서 질문드립니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
환경상의 문제인건지 궁금합니다!
강사님 안녕하세요! 다름이 아니라 네트워크 파트부터 구현하고 실행해보면 처음에System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10061): 대상 컴퓨터에서 연결을 거부했으므로 연결하 지 못했습니다. [fe80::95d5:4a87:cb84:5402%17]:7777 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at DummyClient.Program.Main(String[] args) in F:\C#\Server\DummyClient\Program.cs:line 31라는 문구가 뜨고 이후에 강의에 나온것처럼 메세지가 Receive하고 Send하면서 제대로 연결되는데요.그냥 제 컴퓨터 CPU환경이 달라서 그런건지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유니티에서 실행 중지해도 계속 로그 남는 현상
유니티연동#1에서 마지막에 서버랑 유니티랑 연동을 하는것까지는 성공했는데, 실행 중인 유니티를 플레이 버튼을 한번 더 눌러서 실행을 취소 시켰는데도 계속 패킷을 받는지 로그가 계속 남는데 이건 어떻게 해결할 수 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님 꼭 답변 부탁드려요..ㅠㅠ
아래에 댓글 달았는데늦게 달아서 그런지 답이 없으셔서요..https://www.inflearn.com/questions/622656/아직 해결을 못했는데 부탁드립니다