Server programming10 05_03_유니티와 서버 연동 방법 #4 개요 플레이어의 이동을 서버에 보내는 코드, 클라이언트에서 플레이어를 제어하는 코드, 그리고 서버에서 클라이언트로 데이터를 전송하는 방법을 보여줍니다. 특히 이 예제에서는 네트워크를 통해 플레이어의 위치를 업데이트하고, 여러 플레이어가 게임에서 움직일 수 있도록 만드는 방법에 대해 설명하고 있습니다. 또한, 클라이언트는 서버로부터 플레이어 리스트를 받아오고, 이를 기반으로 새로운 플레이어를 생성하거나 기존 플레이어를 업데이트합니다. 마지막으로, 이 예제는 다수의 플레이어(500개까지)를 동시에 처리할 수 있음을 보여줍니다. 이를 통해 Unity와 C#을 사용하여 대규모 멀티플레이어 게임을 개발할 수 있음을 알 수 있습니다. 1.유니티 작업에 들어가기 전에 1_1. 로그 안보이게 Server의 Packet.. Server programming 2023. 5. 23. 04_01_Job Queue_채팅 테스트 #1_서버 다룰 내용 및 요약 이번 시간에는 서버 코어에서 발생하는 크래시를 수정하고 새로운 패킷을 설계하는 방법을 다룹니다. 또한, 클라이언트가 접속하면 자동으로 채팅방에 입장하게 하고, 게임 룸에 입장 및 퇴장 기능을 추가하는 방법을 소개합니다. 이를 통해 클라이언트가 채팅 패킷을 보낼 때 서버에서 처리하는 방법을 구현할 수 있습니다. 이러한 구현을 통해 서버와 클라이언트 간의 채팅 기능이 원활하게 동작하도록 할 수 있으며, 게임 내 채팅 기능을 구현하는 데 필요한 기본 구조를 마련할 수 있습니다. 이를 통해 채팅 기능이 추가된 게임 서버를 구축할 수 있습니다. 패킷까지는 어느정도 준비가 됐고, 세션에 대한 네트워크 부분도 어느정도 준비가 됐으니까, 이어서 컨텐츠를 작업할 대략적인 준비는 끝났다고 볼수 있다. .. Server programming 2023. 4. 25. 01_01_멀티쓰레드 개론 컴퓨터 구조 원리, 운영체제 지식 필요해 한식 일식 패밀리 레스토랑 내부 인테리어 하고 직원을 뽑아야 해 한식, 일식 각각 1명씩, 패밀리 레스토랑에서 2명 고용한 상황이라 가정 직원들이 영혼을 주입해서 영혼이 주입된 직원만 움직일 수 있는 상황이라 가정 영혼을 주입해서 빙의 되는 순간 움직이면서 서빙도 하고 주방도 볼 수 있는 상황이 된 거. 근데 그렇게 되면 다른 식당은 움직이지 못해. 한식 직원 영혼을 빼내서 일식직 직원에 빙의 해서 일식집 직원을 움직이게 해. 이런 행동을 짧은 시간에 왔다 갔다 하면서 하게 되면 1개의 영혼이 4개의 직원을 동시에 움직이는 착각이 들게 할 수 있다. 정확히 말하면 특정 시간대에 두명이 동시에 움직일 수는 없지만 얼핏 보면 동시에 움직이게 보인다. 그래서 식당이 굴.. Server programming 2023. 3. 12. 00_03_OT_환경 설정 요약 1. 프로젝트 만들기 - GameServer (콘솔 앱) - DummyClient (콘솔 앱) - 클라 용도로 사용할 - ServerCore (정적 라이브러리) - 서버의 핵심 네트워크 및 스렐드 기능 등등을 모아 놓은 라이브러리 파일 2. 솔루션 폴더로 가서 폴더 추가 - Binary - 실행 결과물들 모아 놓을 것 - Libraries - lib파일 넣어둘 곳 - Debug, Release 폴더 추가 3. 설정 - ServerCore 속성 - 구성, 플래폼 변경 - 출력 디렉토리 Libraries로 4. ServerCore 구현 - Network, Utils 폴더 생성 - Utils에 파일 넣기 - 리소스, 소스, 헤더 파일 폴더 삭제 - framework.h 코드 pch.h에 옮기고 삭제 - .. Server programming 2023. 3. 12. 02_08_멀티쓰레드 프로그래밍_Sleep Q1. context switching는 어떨 때 발생하나오? Q2. 스케줄링에 대해 설명해 보세요. Q3. 스레드 상에서 준비, 실행, 대기 되는 프로세스를 유저스페이스와 커널 스페이스와 연관해서 설명해 보세요. Q4. 일단 자리로 돌아가는 코드를 3가지 버전으로 작성해 보세요. 대기를 하는 두번째 방법인 렌덤 메타에 대해 알아볼거야. 지난 시간에 거의 대부분의 기능을 구현해서 오늘은 단순해. 그냥 sleep 계열의 함수하나만 호출하면 끝이야. sleep 한다는 거 자체가 운영체제의 스케쥴링 관리와 밀접한 관련이 있기 때문에 이거에 관해서 몇가지 언급을 해야 할 거 같아. 두번째 상황 같은 경우는 화장실에 누가 있을 때 서서 무한으로 대기하는게 아니라 일단 자리로 돌아온 다음에 일정시간을 기다렸다 다시.. Server programming 2022. 8. 5. 02_07_멀티쓰레드 프로그래밍_SpinLock Q1. Spin Lock 의 개념에 대해 설명해 보세요. Q2. volatile 키워드의 의미는? Q3. 스핀락은 어떨 때 쓰는게 좋고 어떨 때 쓰면 안좋은가? Q4. SpinLock 클래스를 구현하고 이를 이용해서 2개의 각 스레드가 1을 10000번씩 더하고 빼는 코드를 구현해 보아라. 이번 시간에는 스핀락을 구현해 보는 실습을 할거야. 많은 것들을 배울 수 있을거야. 면접에 단골로 등장하는 주제야. 멀티 스레드가 중요하면서도 멀티 스레들와 관련해서 스핀락만 물어봐도 멀티스레드에 대해 이해하고 있는지를 간단하게 테스트할 수 있는 질문이기 때문이야. 오늘 실습을 해볼거는 일단 지난 시간에 했던 코드를 복원하고 시작한다. #include "pch.h" #include #include "CorePch.h".. Server programming 2022. 8. 5. 02_06_멀티쓰레드 프로그래밍_Lock 구현 이론 Q1. 락이 걸렸을 때 정책 3가지의 장단점을 설명해 보세요. Q2. 컨텍스트 스위칭이 일어나는 과정을 설명하세요. 앞으로 할 것 Lock을 표준에서 제공하는 mutex만을 사용하는게 아니 실질적으로 우리만의 방법으로 Lock을 구현해 보는 연습을 해볼거야. 왜 하냐? 서버 개발을 할 때 평생 달고 다닐 정도로 Lock이 중요하기 때문 면접에서 자주 나오는 개념들이 많이 들어간다. 멀티스레드 프로그래밍을 할 때 도움이 많이 되는 내용들이다. 그래서 돌고 돌아서 우리가 하고 싶은건? 자물쇠를 만들어서 안에 누가 들어가 있으면 한번에 한 명만 들어갈 수 있는 상황을 만들어 줘야 하기에 대기를 해야 하는데 여기서 여러 생각할 점이 있어. 밖에 있는 애 기준으로 안에 누군가가 안에 있다고 가정을 할 때 어떤 정.. Server programming 2022. 8. 3. 02_05_멀티쓰레드 프로그래밍_DeadLock Q1. 데드락이 발생하는 이유는? Q2. 데드락을 막기 위한 방법은? lock_guard 를 활용한다고 해서 세상의 모든 데드락이 사라지는게 아냐. lock이랑 unlock 짝 안맞춰서 발생하는 데드락 상황은 1차원적이고 자주 일어나지 않는 부분들이야. 까다롭게 데드락 발생하는 상황이 존재한다. 크래시가 일어나는 경우 1. 높은 확률로 null 포인터 잘못 참조하는 경우 2. 그 외에 데드락도 상위권으로 등장하는 버그다. 예제를 통해 알아보자. 실습용 클래스 2개 추가. AccountManager, UserManager를 Main 필터에 생성한다. 온라인 게임에서 입장할 때 계정이 있을 거고, 그 계정을 토대로 캐릭터 받아오는 작업을 할텐데 그 Account 라고 보면 된다 AccountManager.h.. Server programming 2022. 8. 3. 02_04_멀티쓰레드 프로그래밍_Lock 기초 Q1. vector v; void Push() { for (int32 i = 0; i < 10000; i++) { v.push_back(i); } } int main() { std::thread t1(Push); std::thread t2(Push); t1.join(); t2.join(); cout Server programming 2022. 8. 1. 02_03_멀티쓰레드 프로그래밍_Atomic Q.힙, 스택, 데이터 영역의 차이는? 예를 들어 설명하시오. Q. 왜 멀티 쓰레드로 전역 변수를 수정하면 결과가 이상하게 나오는지 설명하시오. Q. atomic을 사용하면 왜 제대로 값이 나오는지 원리를 설명해 보시오. Q. atomic의 단점은? 이번시간은 멀티스레드 환경에서 공유 데이터 사용할 때 일어나는 문제점 알아볼거야. 이렇게 하면 당연히 값은 0이 출력된다. 하지만 이번에는 각각의 스레드로 실행을 하게 되면 0이 아닌 할 때 마다 엉뚱한 다른 값이 나온다. 왜 당연히 0이 안되는 걸까? stack 같은 경우는 각기 자신의 영역을 따로 가지고 있다. 만약 sum 변수가 Add() 함수 내부에 있다면 void Add() { int sum = 0 ; for (int i = 9; i < 100'00.. Server programming 2022. 7. 29. 이전 1 다음