월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티쓰레드 관련 질문입니다.
1. 이 강의에서 Interlocked를 사용하여 race condition을 해결하였는데 멀티쓰레드 환경의 경우 두 일꾼이 각자의 일을 병렬적으로 하게 되는 장점이 있는 것으로 알고 있습니다. 하지만 여기서 Interlocked를 사용하게 되면 Thread_1이 작동하는 동안 Thread_2는 대기상태가 되는 것으로 이해하였는데 이러한 경우에는 멀티쓰레드의 장점을 살리지 못한 것으로 이해하면 될까요? 효율성 측면에서 생각해봤을 때 싱글쓰레드와 차이가 없는 것으로 느껴졌습니다. 2. 만 번이상 실행할 경우 0이 아닌 다른 값이 출력되었는데 race condition을 생각해본다면 만 번보다 적은 횟수를 시행하더라도 0이 나올 수 없는 것 아닌가요? 10000번보다 적게 시행하였을 경우에 0이 나오는 이유가 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
XmlReader의 Depth에 대해서
17:27에서 int depth = r.Depth +1; while(r.Read()) { if(r.Depth != depth) break; } 코드가 이렇게 됐었는데 <packet name="PlayerInfoReq"> <long name ="playerId"/> <string name ="name"/> <list name ="skill"> <int name="id"/> <short name ="level"/> <float name ="duration"/> </list> </packet> 그러면 <list name = "skill"> 다음 줄을 들어갈때는 while에서 빠져나가게 되는거 아닌가요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AfterValue
강의 맨 끝에 int afterValue라는건 데이터가 변경된 후의 데이터를 출력하는 거니까, 동시에 일어날수있는 쓰레드에 양쪽에 붙여야 서로 변경된 값을 출력할수있는 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 베리어 질문
1. 물을 내린다는 것이 주문현황에 옮긴다는 말인가요? 2. write를 하면 메모리 베리어를 하는것이 주문현황에 옮기기위한 절차라고 해석하면될까요? 근데 메모리베리어의 가시성이란 값을 불러오는 것도 되는것 같은데 메모리베리어는 메모리에 넣고 불러오고 이 두가지를 할 수 있는건가요? 제대로 이해하고 질문하는지는 모르겠지만 한번 올려봅니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
문의드립니다.
삭제된 글입니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
OnRecvCompleted 관련해서 질문있습니다.
안녕하세요~ Session.cs에 OnRecvComplete하는 부분에 왜 락을 걸지 않는지 궁금합니다! 공유된 RecvBUffer를 사용하고 있어서.. 사용해야 할것 같다고 생각했습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
정말 사소한 건의사항입니다
안녕하세요 강의를 잘 듣고있는 수강생입니다. 아주 사소한 건의를 하나 드리려고 합니다. 강의를 하시는 도중 "어쨌든"이라는 단어를 종종 사용하십니다. 이 "어쨌든"이라는 단어가 강의를 수강하는 저의 입장에서 다소 확신이 없는듯한 뉘앙스로 들립니다. 예를들어 [사소한 문제가 있거나 , 최적화 되어있지는 않지만 프로그램의 실행은 문제가 없다.] 등의 의미로 해석이 될 수 있다 라고 생각합니다. 따라서 앞으로 진행되는 강의에 대해서는 해당 단어의 사용을 줄여주시거나 자제해주시는게 수강하는 학생 입장으로서 더 확신을 가지고 공부할 수 있게 하는 방법이라 생각됩니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
내용이 생각보다 되게 어렵네요. 학습 방법에 대한 질문을 드립니다
처음에 해당 강의를 전부 이해하고 넘어가는 것이 좋을까요 아니면 아 이런게 있나보다 하고 일단 끝까지 간 다음에 큰 틀을 대강 이해하고 여러 번 반복해서 숙달하는게 나을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Invoke의 역할이 이해가 가지 않습니다.
_onAcceptHandler.Invoke(args.AcceptSocket); 이 코드가 어떤 일을 수행하는 것인지, 왜 필요한 것인지 잘 이해가 가지 않습니다... _onAcceptHandler가 args.AcceptSocket을 수행하도록 하는 것인가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓에 바로 메세지를 보내는게 아니라 버퍼를 만들어서 넣어주고 주고받는 이유가 있나요?
수신과 송신 버퍼를 둘 다 가지고 있고 거기에 일단 메시지를 넣어서 보내거나 버퍼를 통해서 받고 있는데 버퍼를 사용하는 이유가 소켓이 바로 메세지를 받지 못하고 대기하는 경우나 병목이 있을 경우를 대비해서 그런건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C# 이랑 C++ 서버 차이점이 있을까요??
안녕하세요 선생님 C#서버강의 듣고있는 입문학생입니다 C#이랑 C++서버의 장단점은 어떤게있으며 , C#으로 MMO서버를 돌려도 문제가없는건가요?? 유니티로 2D도트 MMO구현을 생각중입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
13:25에서 강제로 ushort(4)로 조작하는 부분에서 질문있습니다.
13:25에서 패킷 size를 강제로 ushort(4)로 조작하는 부분에서 이해가 안가는 부분이 있습니다. size를 조작해도 playerId가 정상적으로 출력되는 이유를 아래와 같이 정리해봤습니다. 여기서 궁금한 점이 OnRecv()에서 패킷의 헤더를 확인했을 때 4바이트라고 조작되어 왔기 때문에 while문을 3번 돌지 않을까 라는 생각이 들었는데, 실행 결과를 보니 그런거 같지는 않아서 제가 잘못 이해한 부분이 있는건가 여쭤보고 싶습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TCP 프로토콜에 대해 더 궁금한 점이 있습니다.
Send 2번을 보낸 패킷을 Recv 한번의 호출로 수신버퍼를 읽어 2개를 같이 읽을 수 있는 부분은 이해가 가는데요 이해되지 않는 부분이 패킷이 분할되어 올 수 있다는 부분입니다. 1. 송신자의 입장에서 수신 측의 윈도우 사이즈를 받아 하나의 큰 패킷을 분할하여 보내는 경우, 수신측의 어플리케이션 계층에서 Recv를 통해 분할된 패킷의 바이트를 받을 수 있기 때문인가요? 2. 위의 경우가 Yes라면 수신자에서 받은 패킷이 송신자에서 보낸 분할된 패킷중 순서상 뒤에 해당하는 분할패킷을 먼저 받게된 경우 어플레케이션 계층에서 수신버퍼를 읽을 수 있는 부분이 이해가 안됩니다. 수신측은 TCP 계층에서 분할된 패킷이라는 것을 알고 있고, 앞부분이 비어있는 상태라 다시 보내달라 요청하게될 것 같은데요 이 경우 TCP단에서 분할된 패킷이 오기까지 기다리면서 어플리케이션 계층의 수신버퍼에서 읽을 수 없도록 처리가 되나요? 3. 수신자 입장에서 발신자가 보낸 패킷의 일부분만을 받을 수 있다는 부분을 명확히 알고싶습니다. 윈도우의 사이즈로 인해 발신자가 패킷을 쪼게 보내기 때문에 수신자 입장에서 일부분의 패킷이 올 수 있다는 의미이실까요? 그렇다면 앞부분이 비어있는 패킷이 온 경우 어플리케이션에서 해당 부분을 수신버퍼에서 읽을 수 없는건가요? 수신측에서 분할된 패킷을 모두 받고 어플리케이션 계층에서 읽을 수 있도록 데이터를 올려주나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TaskCreationOptions.LongRunning 을 사용하면 새로운 쓰레드가 생성되나요?
TaskCreationOptions.LongRunning을 사용하면 ThreadPool의 Thread들과는 전혀 아무 상관이 없는 새로운 Thread가 하나 생성된 후 그것이 일을 하는 건가요? 예시를 들어보면 ThreadPool.SetMinThreads(1, 1) ThreadPool.SetMaxThreads(5, 5); 로 ThreadPool에 있는 Thread를 5개를 잡아놨는데 Task t = new Task(() => { while (true) { } }, TaskCreationOptions.LongRunning); 를 쓰게 되면 ThreadPool에 있는 5개의 Thread 중 하나를 쓰는 것이 아니라 새롭게 쓰레드를 하나 만들어서 위의 진한 검은색 코드를 실행하는 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
OnRecvCompleted() 메서드에서 질문있습니다!
OnRecvCompleted() 메서드에서, 클라이언트가 보낸 데이터를 잘 받았으면 if문 안에 있는 부분이 실행되고 아니면 else문 안에 있는 부분이 실행되는걸로 이해했는데, 콘솔 창을 확인해보니 두 부분 다 실행이 되는것 같습니다. 혹시 제가 오타를 낸건가 싶어서 나중 강의에서 선생님 올려주신 파일을 받아서 OnRecvCompleted() 부분을 수정해서 실행해 봤는데도 else {...} 부분이 실행되더라구요... 혹시 왜 이런지 알려주실 수 있으신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
초보적인 질문. 서버 구축 비용
안녕하세요? 간단한 멀티 게임을 만드는 것에 관심을 가지고 이제 막 프로그래밍을 배우기 시작한 초보입니다ㅠㅜ RooKiss님의 유니티c# 1강과 3강을 수강하고 있는데 궁금하여 질문 드리게 되었습니다 나중에 동시에 접속하려면 서버가 필요할 텐데 소규모로 50명~100명 정도가 동시에 접속할 수 있으면 좋을거 같고,, 서버로 쓰는 컴퓨터가 별도로 필요한거로 아는데 그 외에도 추가적으로 온라인 서버를 사용하려면 건물 임차하듯이(??) 온라인 서버공간을 빌려쓰는 비용도 다달이 발생하게 되는 것인가요..?? ( 기초적인 것도 몰라서ㅠㅠ 초보적인 질문 죄송함니당..) 간단하게 줄여서 질문드리자면 50명 내외로 접속가능한 멀티게임을 만드려면 서버 구축이나 유지하는데 비용이 어느정도 들어갈지가 궁금합니다...! 감사합니다..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ServerSession OnRecvPacket 구성에 관한 질문입니다.
델리게이트를 이용해서 함수콜하는것이 아직 직관적으로 이해가 너무 느리고 헷갈려서 Swich Case문으로 구성했는데, 이렇게 해도 문제가 없을까요? 제가 만든 방법은 아래와 같습니다. 우선 PacketQueue에 구성을 그림과 같이 했습니다. ArraySegment를 Push와 Pop하는것으로 하고 ServerSession OnRecvPacket에서는 이처럼 들어온 RecvBuff를 바로 PacketQueue에 넣어줫습니다. 그러고나서 NetworkManager Update에서 큐에서 하나뽑아내고 파싱 한다음에 id값에 따라 switch-case을 이용해 출력해줫는데 이렇게 구성해 나가도 될까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
12:20 Write와 Read의 보안성 질문
Write 함수 같은 경우에는, 우리가 컨트롤 자체를 잡고있어서 악의적 사용에 대한 걱정이 없지만, Read의 경우, 주의할 필요가 있다고 하신 말씀이 잘 이해가 안됐습니다 ㅠㅠ Write의 경우, 저희가 호출을 원할때만 호출을 하게 되서 그런건가요..?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
_sendArgs 위로 올리는 이유 질문입니다.
1. _sendArgs를 Send에서 멤버변수로 빼주고, 2. _sendArgs.Completed += 이벤트 연결 작업을 Start에서 하도록 옮겨주셨는데, 이 부분이 잘 이해가 안됩니다.. 설명에서 말씀하셨듯이 send는 recv와는 다르게, 송신하는 시점에서 버퍼의 정보를 알 수 없어서 라고 하셨는데, 전역으로 올려주면 버퍼의 정보를 몰라도 채울수가 있는 건가요? 그리고 크기를 크게 잡아서 만들어서 보내는 행위를 하게 되면, 성능 문제 떄문에 안되는 건가요? 그리고 이벤트 구독? 과 같은 행위를 왜 Start 함수내로 옮기는 것인지도 헷갈립니다..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트에서 보낸 데이터가 다 도착하지 않았을 때...? 처리하는 부분이 있는건가요?
클라이언트에서 보낸 데이터가 다 도착하지 않았을 때 다음 데이터가 올 때까지 기다린 후 처리한다고 말씀하셨는데, 이 부분이 코드 어디에 구현되어있는건가요...? 위에 있는 코드를 나름대로 해석해보니 1. OnWrite()는 _recvArgs.Buffer에 들어있는 데이터만큼 _recvBuffer의 _writePos를 증가시킨다. 2. OnRecv()한 데이터(_recvArgs.Buffer에 들어있는 데이터)의 크기를 processLen에 담는다. 3. processLen의 크기만큼 _readPos를 증가시킨다. 라고 이해했는데, 클라이언트에서 보낸 데이터가 완전한지 불완전한지 딱히 판단하는 부분은 없어보이고 그냥, [1.데이터가 들어온만큼 _writePos를 증가시킨다 2. 처리한다 3. 처리한만큼 _readPos를 증가시킨다]를 실행시킨거같아서요!