월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
13:38 ReaderWriterLock 질문입니다.
강사님께서 아무도 WriteLock을 잡고있지 않다면, Lock이 없는 것처럼 동시다발적으로 들어온다고 하셨는데요. WriteLock를 잡았을 때, Lock이 없는 것처럼 행동하던 GetRewardById를 잡고있는 스레드들은 어떻게 처리되나요? 여러 스레드가 lock이없는 것처럼 들어오다가, 어떤 스레드가 WriteLock을 잡으면 서로 배타적으로 잠금된다는게 이해가 힘듭니다 ㅜㅜ
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님. API 학습에 대해서 여쭤보고 싶습니다.
학습을 해 나갈 수록 점점 더 많은 기능들을 만나는 거 같아요. 제가 코딩 경험이 부족해서 많은 API들을 학습하는 것에 있어서 어떤식으로 접근해야 하는지 여쭤보고 싶습니다. 그때그때 필요한 API들을 찾아내야 될거같은데... API만 따로 학습한 뒤에 프로젝트에 적용하시는 편이신지 아니면 API들을 많이 사용하다 보니 자연스럽게 외워지신건지 궁금합니다... 또 어떤식으로 학습하시는 걸 좋아하는 지도 여쭤보고싶어요!!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이동 동기화들을 보면서 생각한게 있는데요.
만약에 애니메이션 이나 따로 동기화 하는 부분이라면 애니메이션 동기화를 예를들면, 파라미터 데이터를 하나씩 보내는거 보다는 한 캐릭터에 모든 파라미터 데이터를 모았다가 한번에 서버로 보내는게 최고에 방법인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
15분 근처부터 Session을 매개변수로 받는 부분
class PacketHandler { public static void PlayerInfoReqHandler(PacketSession session, IPacket packet) { PlayerInfoReq p = packet as PlayerInfoReq; Console.WriteLine($"PlayerInfoReq : {p.playerId} : {p.name}"); foreach (PlayerInfoReq.Skill skill in p.skills) Console.WriteLine($"Skill({skill.id})({skill.level})({skill.duration})"); } } 위 함수에서 Session을 받아오지만 직접 사용은 하지 않는 이유가 뭔가요? 그냥 공통 인터페이스를 만들어놓은건가요? 그리고 굳이 IPacket으로 받아와서 PlayerInfoReq로 캐스팅하는 부분이 잘 이해가 안가는데 캐스팅 해주는 이유를 알고싶습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
디스어셈블리가 안되어서 질문드립니다.
처음에는 주소가 비어져있고 " 디스어셈블리를 실행 모드에서 표시할수 없습니다" 만 있었습니다. 주소를 직접 입력해보니 , 위 메세지가 나옵니다. 어떻게 해결해야 할까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
리시브 에이싱크
accept 를 비동기로 구현할땐 OnAcceptCompleted에서 낚시대를 다시 던져줄때(RegisterAccept) 소켓오류조건문을 만족하든 안하든 다시 낚시대를 던져주는걸로 구현을 하는데 리시비를 비동기로 구현할때는 리시브바이트 > 0 조건문과 소켓에러 조건문이 만족할때 다시 낚시대를(RegisterRecv)를 던져주는데 만약 그럼 조건문이 만족하지않을때는 다시 낚시대를 안던져주는건데 문제가 되지않나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓 프로그래밍과 관련해서 질문이 있습니다.
소켓 프로그래밍을 처음 접해봐서 몇 가지 궁금한점이 있습니다. 카카오톡과 같은 앱을 이용해서 다른 사람들과 네트워크를 이용해서 통신하는 것들이 가능한 이유가 카카오톡 앱에서소켓 프로그래밍을 활용했기 때문인가요 ??? 즉, 네트워크를 통해서 통신하는 모든 프로그램이 소켓 프로그래밍을 활용한 것인가요 ??? 그리고 이러한 소켓 프로그래밍은 일련의 틀이 정해져있는건지 궁금합니다. 예를 들어서 소켓 생성하고 바인드하고 이러한 과정은 거의 약속처럼 사용되는 건가요 ? 음.. 그러니까 어떤식으로 사용해야되는지 일반화가 되어 있는 작업인가요 ?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Receive 버퍼에 대한 질문
저희가 Send를 할땐 Socket.Send()라던가 Socket.SendAsync() 같이 메서드를 호출할때 인자로 들어갈 버퍼의 크기와 데이터를 미리 알고 있으니 해당 버퍼를 넘겨주면 문제가 되지 않는데 반대로 Receive할땐 저희가 얼마만큼의 버퍼가 들어올지 모르니 (영상에서)1024크기의 바이트 배열로 선언하였는데 실제로 Socket.Receive(buff), SocketAsyncEventArgs.SetBuffer(buff, 0, buff.Length) 에 들어온 데이터가 1024 배열 크기보다 크다면 짤리나요? 아니면 1024는 임시 공백 크기이고 실제로 들어올땐 크기에 상관없이 들어온 데이터 배열이 덮어쓰나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티쓰레드와 관련해서 질문이 있습니다.
멀티쓰레드를 학습하게 되면서 나름대로 정리를 해보았는데요. 멀티쓰레드 환경에서는 쓰레드가 공유하는 자원에 대한 일관성이 보장되어야 한다. 즉, 특정 쓰레드에서 공유 자원의 데이터를 변경하면 다른 쓰레드에서도 똑같이 변경된 데이터를 다뤄야한다. 이러한 문제를 해결하기 위해 쓰레드가 공유 자원에 접근하기 전 Lock을 걸고 들어가서 다른 쓰레드가 해당 자원에 접근하지 못하도록 막고, UnLock을 통해서 다른 쓰레드가 접근할 수 있게 해준다. 이 때 접근한 쓰레드는 변경된 공유 자원 데이터를 사용하게 된다. 이렇게 이해한게 맞는건가요 ? 원자성이라는 개념을 이해하기를 하나의 작업을 처리할 때 수행되는 모든 과정들을 일련의 한 묶음으로 보고 이것은 마치 더이상 나누어지지 않는 것처럼 모두 수행되거나 모두 수행되지 않아야 한다. 그런데 Lock을 통해서 원자성을 구현한다고 이해하고 있는데 이게 맞는건지 궁금합니다... 왜냐하면 Lock을 통해서 공유자원에 다른 쓰레드가 접근을 못하게 막는것은 맞지만 Unlock을 할 때까지 여러가지 작업을 할 수 있는데 그것은 원자성을 보장하지 않는 거 같다고 생각해서입니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
굳이 비동기 방식을 사용하는 이유
블록킹 방식과 비동기 방식의 차이는 분명히 알겠습니다만둘의 사용에서의 차이는 모르겠습니다.예를 들어서 블록킹 방식은 소켓.Accept에서 클라이언트가 연결 요청을 할때 까지 대기를 하고 비동기 방식에선 연결 요청을 할때 까지 서로의 메서드를 호출하며 대기하는 것인데 대기 방식의 차이일 뿐이지 성능이나 이점에 어떤 차이가 있는지 잘 모르겠습니다. 또한 리슨소켓.AcceptAsync의 반환형으로 나온 bool pending 값은 정확하게 어떤걸 의미하는건가요? p.s 항상 질문에 대해 빠르게 답변을 달아주셔서 진심으로 감사드립니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
코어와 프로세스, 쓰레드간의 관계에 대해서 궁금합니다
그림판 비유를 보면 컴퓨터에서 동시에 사용하는 프로그램마다 최소한 하나의 프로세스와 쓰레드를 가지고 있는데 컨텍스트 스위칭이 일어난다고 하면 코어 하나만 갈구는거 아닌가요? 그리고 아직 쓰레드를 직접 사용해본적이 없어서 잘 모르겠지만 메모리의 동기화를 보장하기 위하여 멀티스레드 프로그래밍에서 lock를 적극적으로 사용하는데 이러면 어느부분에서 성능향상이 일어나나요? lock을 사용하면 사용할수록 싱글코어와 다를것이 없다고 생각되서요 Web에서 종종 다루는 비동기적 처리를 하기 위해서 스레드를 사용하는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
리스너 코드 무반응
소켓프로그래밍2에서 하시는 가장 기본적인 클라와서버 소통방식을 구현할때는 패킷을 잘 주고 받았는데 Listenr비동기방식을 구현하고 나서는 서버에서는 OnAcceptHandler로 안넘어가고 클라에서는 받는 패킷에서 멈추더라구요(디버그중 일시정지를해보니) 코드도 잘못된게 없고 오류도 안뜨고... 무슨문제일까요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Context Switching 질문
강의를 진행하며 의문점이 생겨 질문 남깁니다 >> 제가 이해하기론 한 코어로 여러 쓰레드를 처리할땐 각 쓰레드의 로직을 잠깐 실행하고 다음 쓰레드로 넘어가서 다시 로직을 잠깐 실행하고를 반복하며 마치 동시에 실행되는 효과를 얻을 수 있다는걸로 이해했는데 이때 Thread에 Sleep 메서드를 호출하면 해당 코어가 다음 쓰레드를 처리하기 시작하고 Sleep에 할당된 시간 만큼 경과하면 다시 Sleep 메서드가 호출된 쓰레드로 돌아와 처리를 하여 Context Switching 현상이 일어난다고 이해했습니다. 하지만 애초에 코어는 쓰레드를 매순간 옮겨다니며 처리하는데 이건 Sleep이랑 상관없이 코어가 매 쓰레드를 옮겨다닐때 마다 Context Switching 현상이 일어나는게 아닌가요?? 추가로 위와는 다른 질문이지만 CPU 시트를 보면 코어, 쓰레드로 성능표기가 되어있는데 인텔 I5-6세대 기준 4코어 4쓰레드라고 표기되어 있는데 그럼 컴퓨터에서 최대 동시에 구동가능한 쓰레드가 4개라는 건가요? 그건 아닌거 같은데 헷갈리네요..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 중에 추후 Protobuf로 변경할 거라고 하셨는데요
https://github.com/protocolbuffers/protobuf 여기서 C#으로 릴리즈된 압축파일 받아서 빌드하고 dll파일 넣으면 System.Memory 때문에 유니티에서 자꾸 에러를 내네요. 그렇다고 System.Memory 안 쓰는 버전을 받자니 SDK 문제 때문인가 프로젝트 로드가 안 됩니다. 혹시 유니티에서 쓸 수 있는 버전을 추천해주실 수 있나요? 아니면 다른 방법으로 이식을 해야하나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
task와 Thrad , 추가질문
내가 느낀바로는 Task와 Thread가 같은 개념으로 느껴지는데요.. 이것을 언제 task를 쓰고 thread를쓰는지 감이 안잡히네요 그리고 이거와 관련돼서 c#책을보면 문법의 간단한 작동원리와 사용방법을 알려주는데 대체 언제쓰는지는 안알려주더라구요 음.. 예를들어 static 이란것도 언제쓰이는지, 상속은 언제해야되는지, 배열에도 여러가지 배열이 있던데(어레이, 리스트, 배열선언등,,) 언제 어느걸써야할지 이외에도 공부를하면서 계속 같은의문이 드는데요 제가 생각해본걸 말씀드리면 경험에의해 축적되는것인가 라고 추측을 하고는 있습니다. 근데 대체적으로도 언제쓰이는지는 정리된사이트나 알려주는곳은 없을까요? 따라서 종합적으로 한줄로 말씀드리면 이러이러한 기능은 알겠는데 그런기능이 언제쓰이는지 알려면 어떻게 해야되는지..질문드립니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유니티 파트 4 하다가 질문 드립니다
아주 기초적인 질문이라는 것을 알아 상당히 창피하지만 이틀정도 만져보다가 뇌정지가 와 결국 질문 올려봅니다.. 파트 2까지는 잘 연동이 되었고, 로그까지 잘 띄워졌는데 유니티 연동 #4 플레이어를 생성시키는 부분에서 잘 이해가 되지 않아 질문 드립니다. 서버를 실행시킨 뒤 유니티를 실행시키면 NetworkManager->PacketQueue 정도까지만 실행되고, 그 이후로는 잘 실행이 되지 않는 것 같습니다. 선생님 코드를 다운받아 덮어씌워봐도 똑같은 현상이라 제가 어딘가 유니티 코드를 잘못 친 탓일지, 혹은 서버와 유니티 연동이 잘 되고있지 않은 탓인지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Disconnect()를 하는 이유에 대해
다시 복습하는겸 제가 이 구조를 이해하고 치는게 맞나 싶어서 안보고 구조를 머리에 그리며 코드를 재작성 하던 도중 의문이 생겼습니다. SendBuff 랑 RecvBuff가 끝난이후 Disconnect로 접속을 종료하는데. 실제 게임클라에서는 접속을 종료하지 않고 그대로 유지한 상태로 하나요? 아니면은 실제게임클라도 Disconnect을 주기적으로 하면서 데이터를 송수신하나요? 또한 콘솔에서 AutoResetConnection에 뜨는 의미가 뭔가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다!
안녕하세요. 좋은 강의를 보고 패킷모아 보내기를 테스트 해보고 있습니다. 강의와 같이 ServerSession을 500개 만들어서 테스트를 해보면 500개 까지 Connect가 안되고 400좀 넘어서 끝나버리는데(실행할때마다 달라요) 이게 피씨 사양과도 관련이 있나요? 아님 다른 이유가 있을까요? (선생님 파일을 받아서 실행해봐도 비슷해서요)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Action
데이터를 보내는 형식을 구현할때 Action으로 구현을 하셨는데 그냥 OnAcceptCompleted함수에서 todo 부분에서 그냥 리시브 센드를 보내주면안되나요? 왜 굳이 Action을 사용했는지 모르겠어요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS에 관하여
만일 게임서버를 제작할때 유저들의 위치정보들을 전달할때도 TLS를 통해서 모아서 쓰나요? 아니면 따로 쓰는게 있나요? 아니면 TLS를 쓸필요가 없나요?