월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[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를 쓸필요가 없나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
tcpclient
msdn에 보니 tcpclient란게 있던데 이것은 소켓생성 바인드 등등 다 이미 처리가 가능한것들을 구현해놓고 .start()만 해주면 이 강의가 만들고있는거랑 똑같이 작동하나요? 이 강의는 그러면 tcpclient를 직접 구현하는것과 마찬가지인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
델리게이트 질문있습니다!
안녕하세요! 강의 듣고 다른 코드들도 궁금해서 찾아봤는데 스레드에서 아래와 같은 코드를 봤습니다..Invoke(new Action( ()=> { } );선생님이 작성한 코드에서는 Func나 Action 앞에 new를 붙이는 경우는 없는데무슨 경우인지 잘 모르겠습니다...그래서 위의 코드에서 new를 빼면 빨간 밑줄이 발생합니다...[질문] Action 앞에 new를 붙이는 경우와 붙이지 않는 경우 차이점 있나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
논블로킹 송수신 연결 관련 질문입니다.
강사님 안녕하세요. 논블로킹을 위해서 Register함수와 연결체크하는 콜백함수 OnAccepted함수를 사용하는 코드 중에 궁금한게 있어서 질문 남깁니다. - 서버 프로그램만 중단점 걸어 놓은 상태인데요. 여기서 - 클라이언트 프로그램을 실행시키면 서버쪽의 OnAccept함수에 디버그포인트가 걸리는데 //Init함수에서 작성한 코드인데요. SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); //======================== 작성한 부분에서 , 클라가 연결 시도시에 connect 접속 신호가 args에게 전달이 되서 2번째 그림처럼 디버깅 포인트가 걸린건가요? 제가 궁금해서 서버 쪽 모든 코드에 디버깅포인트 걸었는데 서버 Main문의 while 문에서만 걸리는데요, 어떠한 동작 원리를 가지고 진행이 되는지 알고 싶습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
프레임워크,라이브러리 질문
공부를 하다보니 뭔가 소스코드를 짜는게 프레임워크에 맞춰서 짜는 생각이 들어요 (원래 프레임워크 사용용도가 그런거지만) 그러면 프로그래밍실력이좋다 개발자실력이좋다 이말은 프레임워크를 잘 사용한다 이말과 같은건가요? 정말 근본적인 코딩은 어디서부터 시작하는거지라는 의문이 들어서요... 지금 어떤생각이 드냐면 프레임워크 사용방법을 잘 알고 그 뒤에 언어가 뒤따라온다라는 생각이 드는데 이게 맞나요?.. 결론은 개발자가 실력이 좋다라 함은 어떤걸말하는건가요?