월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Send에서 Queue를 써주는 이유가 뭔가요??
큐를 쓰는게 send하려는 데이터들이 몰렸을 때의 병목 현상?을 해결해 줄수 있어서 그런 거 맞나요? 제가 잘 이해했는지 모르겠네요List같은 것도 있는데 굳이 큐를 써주는 이유는 뭔가요...? 선입선출한다는 특징은 알고는 있지만...궁금하네요...
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
그냥 전역변수랑 TLS랑 뭐가 다른지 아직도 모르겠어요
static string ThreadName;이거는 일반 전역변수인데 값을 공유한다면서 왜 값이 안바뀌나요??? static ThreadLocal<string> ThreadName이거는 TLS이고, 모든 스레드가 전역에 고유한 공간을 가져서이름이 바뀔수 있다는 거 맞나요?... 전역인데 다른스레드가 접근 못하는 건가요? 근데 그럴거면 스택영역 쓰지 굳이 왜 전역변수로 만들어서 쓰나요...? DB나 게임 로직에서 뽑아서 쓸수 있게 하려고 전역에다 놓는건가요? (??????)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
혹시 어려워서 포기할까 생각하시는 분들 보고 힘 얻으세요
지금 3번째 들으면서 지나가는 수강생입니다진짜 첫 번째 들을 때 두 번째 들을 때 세 번째 들을 때 이해되는 범위가 다릅니다처음에는 그냥 코드 따라 치면서 완주만 해보세요. 두 번째는 코드의 흐름만 본다는 느낌으로 따라가고, 세 번째는 강의를 눈으로만 보고, 혼자 힘으로 코드를 완성해 보면 확실히 체득이 되는 느낌입니다!다들 화이팅입니다! 저 같은 말하는 감자도 하는데 여러분도 할 수 있습니다!ps. 루키스님 강의 찍으시랴, 부트캠프 준비하시랴 많이 바쁘실텐데 항상 감사합니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
출력 간격 이상
안녕하세요 선생님! 클라이언트에서 온 패킷이 자꾸 이렇게 띄엄띄엄 출력 되는데 왜 그런지 알 수 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 강의 시청중 궁금한점 생겨서 질문드립니다.
웹서버의 경우 실무에서 docker를 많이 사용하는 것 같은데요, 혹시 소켓 기반 실시간 게임서버개발에도 docker를 많이 사용하는지 궁금합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Thread.Sleep()
ServerCore부분에서 Thread.Sleep()을 안하고 만드니까 에러가 납니다. 오류를 찾아보니까 소프트웨어로 인해 연결이 중단되었습니다. 데이터 전송 제한 시간 또는 프로토콜 오류로 인해 호스트 컴퓨터의 소프트웨어에 의해 설정된 연결이 중단되었습니다.입니다.Sleep이 무슨 중요한 역할을 한다고 , 왜 이 친구 때문에 오류가 생긴 건지 모르겠습니다..디버그 모드로 찾으려고 하면 정상적으로 출력이됩니다,, 실행을하면 오류가 생기고요,,, 정리하면thread.sleep()의 유무 때문에 오류가 나는 이유디버그 모드일 때는 정상적으로 출력이 되는데, 실행을 하면 버그가 생겼을 때 오류 찾는 법이 궁금합니다항상 감사합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync
AccepteAsync의 pending이 false일 때 왜 따로 처리를 해줘야되나요??바로 Accept할 수 있는 상황이면 OnAcceptCompleted가 실행되던가, 이벤트 핸들러가 호출 되는게 맞는(?) 흐름아닌가요?->pending 이 true일 때는 기다렸다가 알아서 처리해주기 때문에 이렇게 생각이 들었습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
혹시 내용을 블로그에 올려도 될까요?
제 목표가 강의 내용정리랑 오목+채팅 기능 구현프로젝트인데강의 전체 내용들은 제 개인앱에 정리하겠지만오목채팅기능 구현프로젝트를 블로그에 정리하면서선생님 강의내용을 참고하면서 올리고 싶은데혹시 제가 실수하는 상황이 올 수 있을 거같아서요...!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
nullable 관련 경고가 너무 많이 나옵니다
.NET 6.0 최신으로 올려서 빌드를 했습니다. 경고가 30개 가까이 나오더라구여. 대부분 null 관련 경고인것 같습니다. 이곳에 널이 올수도 있다, 참조하는곳에 잠정적으로 널이 올수도 있다 등등 이런류 경고더라구요. C++과 달리 툭하면 경고를 뱉는거 같은데 내비둬도 괜찮은건가요? 일단 거슬려서 ! (null-forgiving) 연산자로 다 막아뒀는데 이렇게 땜빵을 해도 상관 없을까요? 아니면 좋은 수정 방안이 따로 없을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 UTF질문이 있습니다
학교 프로젝트 중에 C언어로 게임을 만드는 프로젝트가 있는데개인적으로 그 게임에 서버를 붙여볼까 생각 중입니다. 강의에서는 C#에 C#서버를 붙일 때는 utf 16이 편하다고 하셨는데C언어에서는 char크기가 1바이트이기도 하니까 C언어에 C#서버를 붙일 때는 UTF8로 하는게 더 편할까요? 별 차이가 없을까요? 감사합니다 (_ㅇ_ 즐거운 한가위 보내세요)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
원자성과 interlock연산의 관계에 대해서 질문입니다
<interlock 연산은 원자성을 가진다>는 것이 어떻게 <interlock 연산은 동시에 실행될 수 없다>를 설명해 줄 수 있는 것인지 잘 이해가 되지 않습니다.예를 들어 스레드 1과 스레드 2가 Interlocked.Exchange(ref locked, 1)을 정확히 동시에 실행하면 문제가 발생할텐데, <interlock 연산은 _locked 변수에 +1 하는 연산을 분리될 수 없는 하나의 작업으로 만든다>는 것이 어떻게 이 상황을 막는데 도움을 줄 수 있다는 것인가요?이러한 의문 때문에 interlock연산이 기존 연산을 단일 연산으로 만드는 것이 race condition을 해결하는데 왜 도움이 되는지 이해가 되지 않습니다 두번째 질문은 다음과 같습니다. interlock 연산의 동시 실행을 막는 기작은 lock을 이용한 것인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
18분에서 3번째 배리어에 대해 질문 있습니다
배리어가 하는 일은 메모리 read/write 연산의 순서 제어와 배리어 이전의 dirty 데이터들을 dram으로 밀어주는 일 이라고 이해했습니다.그런데 B 쓰레드를 실행할 코어에서는 if 이전에 어떠한 write도 해주지 않았는데 왜 배리어를 넣어 준 것인가요?이 배리어가 어떤 기능을 하는 것인지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이제 이번 강의 보려고 하는데요..
이번 강의가 연동을 위해서 클라이언트를 만드는 것이 맞나요? 저희가 여태 만든 C# 서버는 그대로 사용하고 서버에서 만들었던 여러 파트 중 클라이언트에 필요한걸 가져와서 사용하는 것인가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
PriorityQueue<JobTimerElem> _pq 우선순위큐 질문드립니다.
우선순위큐 안에 요소를 디버그 모드로 확인해보니 계속 한개의 요소만 있는데 0.25초마다 flushroom이 큐에 들어가고 처리되고 반복이어서 그런건가요?아니면 flushroom action 만 있어서 복잡하지 않아서 그런건지 잘 모르겠습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
17분 40초경 질문
안녕하세요 강사님! 다름이 아니라 밑에 분 질문중에 똑같은 질문이 있어 그걸 보고 해결하려고 햇는데 해결이 안되어 질문올립니다. https://inflearn.com/questions/79914 제가 참고한 게시물이구요. SetMinThreads와 SetMaxThreads 다 true로 뜨는 걸 확인했는데도 for문에서 i < 4로하면 작동하지 않고 i < 3으로해야 작동이 됩니다... 또 답글로 남겨주신분이 while문을 안써서 그럴 수 있다고 하셨는데 while문도 다 정확히 들어가있는데 작동하지 않아요. 원인을 알 수 있을까요? +) 로그로 스레드 갯수 확인해봤는데 스레드 갯수는 정확히 5개 생성되었는데 하나가 놀고있네요.. 원인이 뭘까요 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여기까지
session#3 까지는 어찌어찌 따라온것같은데 #4에서 어질어질 해졌습니다. 그냥 이해는 못하고 따라 치고 있습니다..ㅠ 이럴 때는 그냥 끝까지 듣고 복습하는게 좋을까요? 이금 복습하고(처음부터?) 이해하고 다음 수업을 듣는게 좋을까요?? (_ㅇ_)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3D서버 만들 때 질문입니다
복학 전에 개인 작업으로 FPS게임서버를 만들고 있습니다. 구현된 것들: - 신규 유저 접속 시 기존 유저 데이터 전송, 기존 유저에게 신규 유저 스폰 전송 - 키보드 입력(Vertical, Horizontal)을 하나의 Vector3에 저장하여 이전 값과 다를 경우 패킷을 전송 ( 데드레커닝이 맞는진 모르겠음) - 카메라 회전 값을 각 클라이언트에서 0.25초 단위로 동기화 패킷 전송 ( 회전값은 서버에서 검증이 필요없을 거라 생각해서 검증 없이 Echo ) 위에 적은 대로 위의 기능은 문제없이 잘 작동하지만 이동 동기화에 대해서 문제가 심각합니다.... 데드레커닝처럼 이전값과 다를 때만 패킷을 보내는데, 상대 클라이언트는 회전값 동기화가 0.25 + (내RTT/2 + 상대RTT/2)이상이라 이동패킷이 더 빠르게 가버리면 위치값에 대한 데이터 일관성이 깨집니다. 그래서 추가로 1초 단위로 현재 위치를 서버에 전송합니다. 서버는 새로운 위치값을 받고 자신이 갖고 있던 해당 플레이어의 위치값 ( 서버 내에서도 이동방향, 회전값, RTT/2, 오차범위를 기준으로 위치값을 0.25초 단위로 업데이트함) 과 비교하여 이 값이 정상적인 데이터인지 검증합니다. 만약 결과가 정상적이라면 Broadcast, 비정상적이라면 Leave로 구현했습니다. 그런데 문제는 서버에서 검증하는 시간 + 내 RTT / 2 + 상대 RTT / 2 차이 때문에 데드레커닝으로 예측하더라도 계속 이전 위치로 돌아가는 현상이 발생했습니다. 데드레커닝을 포기하자니 너무 느린 반응때문에 FPS에 적합하지 않은 것 같고, 서버 검증을 포기하자니 에디터에 Inspector에서 위치 이동만 해도 핵처럼 보였습니다. FPS에서는 검증을 어떻게 하는게 맞을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
쓰레드가 만들어지는 시점이 언제인가요?
디버그 모드로 확인했을 때에는 bool pending = _listenSocket.AcceptAsync(args); 이 코드 이후에 쓰레드가 새로 생기는 것을 확인했는데 AcceptAsync가 쓰레드를 생성하고 생성한 쓰레드를 사용해서 I/O작업을 확인하다가 완료되면 e(args) 매개 변수에 대한 Completed 이벤트가 발생시키는 것 (공식 문서에서 따왔습니다)인가요?? 쓰레드가 만들어지는 시점이 언제인지 왜 만들어졌는지가 궁금해서 질문남깁니다! 그리고 소멸되는 시점도 궁금합니다.. (서버 공부를 시작하는 단계여서 소멸이라는 단어가 맞는지,,,) 디버깅을 해보면 작업자 스레드가 사라지는게 아니라 client.close()에 있다가 움직이는 것 처럼 보이는데 close하면 거기서 스레드가 자고있다가, AcceptAsync에서 Event를 주면 그때 깨어나서 일한다고 생각하면 되는건가요?? 항상 친절하게 답변해주셔서 미리 감사합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
프로그램 진행되는 과정이 맞는지 확인부탁드립니다!!
client에는 socket.Connect(endPoint) coreserver에는 clientSocket = listenSocket.Accept() 이 부분에서 쓰레드들이 서로를 기다리는 것인가요? client의 쓰레드가 혹은 coreserver의 쓰레드가 먼저 도착해도 상대가 자신을 부를 때(?)까지 기다리다가 서로 확인(connect, accept 둘 모두 실행될 때)이 되면 서로 다음으로 넘어가는 것인가요? (디버그했을 때는 가시적으로는 이렇게 보여서 맞는지 확인차 질문올립니다!)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
책으로 같이 더 공부하려고하는데
지금 게임 서버 프로그래밍 교과서라는 책을 구매해서 같이 보려고 합니다 그 이후에 윤성우의 열혈 TCP/IP를 보려고하는데 이 교재에서는 C/C++로 진행이되는데 C#(유니티)과 동작원리는 같아서 병행해서 공부해도 되는지 아니면 동작원리가 달라서 추후에 C#이 익숙해지고 공부하는 것을 추천하는지 선생님의 의견을 듣고 싶습니다 감사합니다! (아! 마지막으로 위 책들을 추천하는지, 루키스님이 추천하는 책은 어떤 것인지 알고 싶습니다)