월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
에러도 안떠요..
루키스님 코드 받아서 그대로 실행해도 이렇게 됩니다 ㅜㅠ 왜 이러는 걸까요..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여기 에서 이후에서 궁금 한것이 많아서 질문 드려요
1. 이동 등등 까지 해서 너무 좋은거같아요 이 이후에는 패킷 추가 하고 하는 방식으로 무기 선택 공격 피격 같은건서버에서 players list 에서 좌표 가지고 와서 피격 처리후 클라로 보내주는건가요? 아니면 클라에서 나 맞았어 라고 서버로 보내서 서버에선 Broadcast만 해주는건가요 ? 2. 또 강의 중에 들었던 프로토콜 버퍼 나 플랫 버퍼 같은 라이브러리를 이용해서 만들수도 있다고 하셧는데 지금 코드에서 수정 해서 만들어 봐도 될까요? 3. 지금은 서버 이긴한데 자체 컴퓨터 안에서만 돌아가는거 같아요. 노트북이나 쓰고있는 pc ip를 그냥 넣어서 다른 pc에서 접속으로 해도 될까요 수정이 많이 필요한가요?? 따로 강의는 없는거같아서 혼자 해보려고 해요.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock문에 대한 질문입니다.
강의 13분경에 나온 내용을 보고number라는 변수에 대해 접근하는 권한으로써 새 오브젝트 _obj를 만들어 사용했으니 _obj 자체를 number에서 캐스팅해 받아오는 것은 어떨까 하고 시도해 봤고(static object _obj = number;)해당 코드 자체는 성공적으로 동작했습니다. 이런 방식으로 어떤 변수, struct, Class를 캐스팅해서 받는 object를 이용한 lock문은 어떤가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의내용의 블로그 업로드 가능여부
해당 강의를 잘 보고 있는 한 수강자입니다! 해당 강의의 내용을 개인 블로그에 업로드하는 행위가 가능할까요? 가능하다면 소스코드 공개가능여부등 기준을 알려주시면 감사하겠습니다!!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
19:30 즈음에 나온 ref에 대한 질문입니다.
해당 함수를 보다 이해가 안돼서 질문합니다. Interlocked.Increment(ref int location);과 같이 참조해서 값을 사용하고 원자성을 보장해야한다는 이야기를 하시다가 ref 없이 쓰면 안된다고 말 하시는데 애초에 Interlocked의 메소드에서 받는 매개변수 중에서 실질적으로 값에 변화를 줘야하는 매개변수인 location들(대부분의 함수에서 ref T location 혹은 ref T location1, ref T location2 처럼 정의돼있었습니다.) 중에서 참조형으로 넘겨주지 않는 메소드가 존재할 수 있나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ThreadPool에서의 Join
Thread를 만들어서 사용하는 것 처럼 ThreadPool이나 Task에 어떠한 일들을 던져두고 이후 Main이나 다른 쓰레드에서 해당 일이 끝났는지, 어떤 상황인지 알 수 있는 쉬운 방법(혹은 많이 쓰이는 방법)이 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
CS의 특성에 관한 ThreadPool의 질문입니다.
ThreadPool의 레퍼런스를 까보니 Static Class 로 정의되어있는 것을 봤습니다.ThreadPool이 메모리에 올라가는 시기는 언제인가요? 해당 타이밍을 조절할 방법이 있나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
평소에 맥OS에서 VScode를 사용하는 학생입니다.
1. 운영체제가 다른 부분이 학습에 문제가 있을 수 있을까요?2. VS가 아닌 VScode를 사용하여 진행할 방법이 있을까요? 1번 질문에 대한 문제가 없다면 일단 맥북에 VS를 깔아서 사용할 생각입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
XmlReader Read 질문
항상 좋은 강의 감사드립니다. r.depth에 관해서 질문이 있습니다. while(r.Read()) 를 할때마다, r.depth + 1 이 자동적으로 되는지 궁금합니다. r.depth에 +1을 해준적이 없는데 debug를 했을때 자동적으로 depth에 +1 이 되어있어서 이렇게 질문을 드립니다. r.Read 를 할때마다 함수에서 자동적으로 r.depth + 1 이 되는것으로 생각하고 있습니다. 제 생각이 맞는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
재귀적 호출 ReadLock() 질문
재귀적 호출에서 위의 코드로 작성 해주셨는데 아래로 해도 상관없지 않나요? WriteLock()이나 WriteUnlock()에서는 writeCount++;, writeCount = 1; 으로 작성 해 주셨는데 이는 하나의 스레드에서 동작이 보장되어서 라고 생각 됩니다. 그렇다면 위의 코드도 아래로 대처할 수 있지 않나요? 좋은 강의 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
잠긴 Lock을 마주할 때 쓰레드의 대처
앞선 질문 1. 쓰레드가 크리티컬 섹션에 접근할 때 독점하고 있는 다른 쓰레드가 있어 lock이 걸린 상태일 때 쓰레드의 대처가 궁금합니다.(할당된 시간만큼 계속 대기하며 lock의 exit여부를 계속 체크 or 단순 대기 or 할당된 시간을 포기) -구체적인 의문점 앞선 강의들에서 모든 쓰레드들은 cpu로부터 일정한 시간을 분배받아 해당 시간동안 프로그램을 작동시킨다고 이해했습니다. 이번 강의를 들으며 궁금했던 점은 다른 쓰레드에서 크리티컬 섹션을 독점하기 위해 락을 건 경우 또 다른 쓰레드가 접근할 시 해당 락에 막혀서 동작이 제한된다고 들었는데 그 경우는 쓰레드는 할당된 시간만큼 대기를 하는지 아니면 자동으로 다른 쓰레드에게 cpu를 넘기는 지 궁금합니다. 개인적인 생각으론 대기하는 동안 락이 풀릴 경우가 적을 거라 생각해서 시간을 낭비시키는 거보단 다른 쓰레드에게 cpu를 넘겨 다른 쓰레드들의 대기시간을 줄이는 게 이득이란 생각에서 질문 남겼습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
캐시 강의 관련 질문이 있습니다!
안녕하세요, 강사님 수업을 잘 듣고 있습니다. 쉽게 말씀해주셔서 저처럼 잘 모르는 사람도 잘 따라갈 수 있네요. 최근 멀티 쓰레드를 모두 듣고 복습을 좀 해보고 있었는데, 이중 for문 사용 시에 locality로 인해 캐시에서 빠르게 불러올 수 있다는 걸 다른 예시를 통해서도 이해해보려고 하고있습니다. 그러면 아래와 같이 바깥 for문이 작고, 안쪽 for문이 클 때 속도가 더 빠른 것도 16분 경의 예시와 같이 locality로 인해 그런건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
System.ObjectDisposedException: Cannot access a disposed object 에러
강의내용을 복습하며 Session 부분을 여러번 반복해서 만드는 도중 System.ObjectDisposedException: Cannot access a disposed object 에러가 발생하여 질문드립니다. 본 강의에서는 OnRecvComplited 함수에 Disconnect 함수를 추가하지 않으셨는데 (Session #2 첫 부분에서 추가하신 것은 확인하였습니다) Disconnect()가 두 번 실행되었을 경우를 대비하여 _disconnect 를 플래그로 세워 Interlocked.Exchange를 이용하니 에러가 사라졌습니다. 해당 에러는 연결이 끊긴 소켓에 접근할 경우 발생하는 것으로 파악하였습니다. 그렇다면 멀티쓰레드 환경에서 OnAcceptHandler와 OnRecvComplited에 포함된 Disconnect() 함수가 동시다발적으로 실행되면서 해당 오류가 발생한다고 보면 되는 것인가요? +) 추가로 Socket.Close()를 통해 연결을 끊는다는 것을 소켓이 삭제되는 것이라고 봐도 무방한지 궁금합니다. 자료에도 소켓을 해제한다, 대기된 데이터를 삭제한다라는 표현만 사용되었고 소켓 자체를 삭제한다는 이야기는 없는 것 같아 질문드립니다. 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
손님이 20명 동시에 입장요청을 할때
listenSocket.Listen(10) 으로 최대 대기수를 10으로 제한해두어서, 만약 20개가 동시에 입장 요청을 하면 앞 10명만 listenSocket의 대기에 넣어두다가,(뒤에 10명은 fail) Socket clientSocket = listenSocket.Accept(); 로 한명씩 입장시키고, recv send 하고 그 후 clientSocket.Close(); 한 후에 다음 대기번이 다시 Socket ClientSocket = listenSocket.Accept(); 되서 순서대로 하나씩 처리하는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
_sendQueue 질문입니다.
강의 마지막에 와서 뒤늦게 질문하는 느낌이 적지 않게 있는데, 재수강하면서도 여전히 긴가민가한 느낌이 있어서 질문드립니다. #_sendQueue에는 버퍼가 언제 쌓이는가. 쓰레드 A가 제일 처음으로 Send 함수를 호출했다. _sendQueue에 버퍼를 집어넣는다. _pendingList.Count ==0 이라 RegisterSend가 호출된다. 이후 RegisterSend 안에 있는 SendAsync 함수로 pendingList를 송신한다. 그런데 SendAsync 함수가 true 떠서, 즉 송신을 실패했다면? 쓰레드 A는 Lock을 풀고 사라지고, 이어서 다른 쓰레드 B가 Send를 호출했을 때 PendingList의 Count는 0이 아니므로, _ sendqueue에 버퍼만 집어넣고 쓰레드 B는 사라진다. 그 이후에 실패로 끝났던 SendAsync 함수가 콜백으로 OnSendCompleted 함수를 호출하면, _sendQueue에 쌓인 버퍼가 한꺼번에 송신된다. 이런 흐름이라고 이해하면 될까요? 만약 이게 맞다면 SendQueue는 SendAsync 가 실패로 끝났을 때를 위한 안전 장치라고 생각해도 될까요? 마침 질문글 답변 중에 이런 부분이 있기는데 한데 확신이 없네요. 멀티쓰레드보다는 비동기 네트워크 쪽과 관련이 있는데,SendAsync를 한다고 무조건 상대방이 받아준다는 보장이 없습니다.로컬 환경에서야 pending이 거~~의 대부분 false로 뜨고 바로 완료 되겠지만저 지구 반대편에 있는 사람이 접속했다면 이런저런 이유로SendAsync가 바로 완료되지 않고 pending = true로 설정될 확률도 높습니다.물론 말씀하신대로 Latency 뿐 아니라 Recv할게 너무 많아서 상대쪽에서 처리를 못해서 그럴 수도 있구요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session
안녕하세요 궁금한게 있어서 질문드립니다.Session 이라는 인스턴스가 연결된 클라이언트 갯수만큼 만들어지는 걸로 이해했습니다.저 상황에서 만약 server에 연결된 client가 100개라면Server에 100개의 Session 인스턴스각 client는 1개의 Session 인스턴스 일텐데서버 입장에서 A라는 클라와 B라는 클라가 동시에 값을 보내어서 동시에 Send를 해야하는 상황를 생각한다면 서버에서 A 클라에서 받은 값과 B클라에서 받은 값은 각각 다른 Session 인스턴스로 받기 때문에 서로 아무리 멤버변수라고 해도 정적이 아닌 이상 서로 공유하고 있지 않을텐데 Lock를 사용하는 이유가 궁금합니다. send 할때 lock을 이용하는건 하나의 인스턴스 안에서 여러개의 Thread가 생기는것을 고려해서 만들어준건가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
재귀적 락 허용
재귀적 락을 허용 하지 않았을때 ReaderWriterLock은 Write할때 Read가 같이 일어나면 Write하기 전에 있던 데이터와, Write한 후의 데이터가 공존해서 Read해가기 때문에, ReaderWriterLock을 사용 하는거 같은데(Read만 해갈때는 문제 없어서 Read는 공용으로 가능) 어떤 경우에 재귀적 락을 허용하는지 잘 모르겠습니다. 재귀적 락을 허용했을때는 한 쓰레드가 여러개의 데이터를 write,read할때 사용 되는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock 질문입니다
제가 혼자 만들어보면서 느꼈던 점은, "session에서 lock을 걸지 않고 recvbuffer의 writesegment를 가져오거나 DataSegment를 읽어올 때 lock을 걸면 최소한의 범위로 할 수 있을 것 같다" 입니다. 강사님께선 Session의 Send, RegisterRecv, OnRecvCompleted에 하나의 _lock 오브젝트로 전부 잠구셨는데 이렇게 되면 예를 들어 OnRecvCompleted를 호출해서 _lock 범위 내에서 처리하는 동안 Send를 호출하면 Send는 OcRecvCompleted가 끝날 때 까지 대기해야하는 상황이 발생하지않나라는 걱정이 조금 됩니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓프로그래밍 - 운영체제
안녕하세요 수업들으면서 컴퓨터일반에 대한 질문이 생겼습니다. 1. 소켓프로그래밍과 운영체제의 관계는 무엇일까요? 2. 운영체제 커널내에 네트워크와 관련된 부분이 있나요? (그게 소켓일까요?) 전반적으로 운영체제를 공부해야 하나 고민중입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
참조가 보이지 않는분들 중에
혹시 저처럼 참조(R)이 안 보여서 없는줄 알구 개발자 명령프롬프트 열고 명령어 입력하기 직전이신 분들 비쥬얼 스튜디오 2019 사용을 하고 계신다면 같은 기능합니다.