게임 서버

https://www.youtube.com/watch?v=yk-HD8YoyZg&list=PLy-g2fnSzUTDsS7kCzmFYn4BJK6nCs0_r&index=11 Actor Player NPC Control Zone(CZ) 서버가 하는 일 패킷 처리(읽기/쓰기) 틱(Tick) 처리 매 프레임 Actor들의 상태를 업데이트하는 것 기타 시스템 경매장 같은 것 패킷과 틱 처리가 많은 부분을 차지 유저가 늘어날수록 처리해야하는 패킷과 틱이 증가한다 Ex) 5000명의 유저가 있는 서버가 1초에 10틱을 처리한다고 가정하면 유저 한명에게 한 틱을 처리하는데 0.02ms 밖에 주어지지 않는다 멀티쓰레드가 필수 멀티쓰레드 Network I/O와 Work Thread 사이에는 버퍼가 존재(큐 형태) Network..
https://www.youtube.com/watch?v=aWq9C7RARJI&list=PLy-g2fnSzUTDsS7kCzmFYn4BJK6nCs0_r&index=10 Server Authority MMORPG의 경우 서버가 많은 동시 접속자를 감당해야한다 Server Authority 방식의 경우 네트워킹보다 서버가 많은 클라이언트를 핸들링하는지가 관건 소켓 프로그래밍 네트워크는 NIC(Network Interface Card) = 랜카드에서 일어난다 커널에서 드라이버를 통해 하드웨어를 제어한다 -> 하드웨어 별로 다른 스펙을 같은 인터페이스로 맞춰주는 것이 드라이버 커널과 유저 프로그램은 소켓을 통해 통신한다 소켓은 일종의 파일 -> 읽기와 쓰기가 일어난다 요청을 보내고 응답이 언제 올지 모르기 때문에..
Server Authority 서버가 모든 권한을 가진 방식 -> 중재, 심판, 플레이 등 클라이언트는 서버가 알려준대로 동작하기만 한다 CS(Client Server) 방식 클라이언트는 질의하고 서버가 응답하는 방식 Ex) 웹 서버 클라이언트가 질의하지 않으면 서버가 응답하지 않는다 다이나믹한 변경을 감지하기 쉽지 않다 게임 서버의 경우 연결을 유지하기 때문에 서버가 바로 알림을 보낼 수도 있다 클라이언트가 스킬 사용 요청을 보냄(Request Skill + Skill ID) 서버가 해당 스킬 로직 실행 서버가 스킬 요청 결과를 응답함(Response Skill) -> 성공, 실패 등 이후 서버가 스킬의 효과들을 알림으로 보냄 서버가 게임의 모든 것을 컨트롤해야한다 네트워킹보다는 서버가 내부적으로 게임..
https://www.youtube.com/watch?v=11Ilw4NcZM8&list=PLy-g2fnSzUTDsS7kCzmFYn4BJK6nCs0_r&index=8 게임핵 Deterministic 방식은 상대가 주는 Input Set에 의존하는 방식이기 때문에 해킹에 취약하다 Deterministic 방식은 딜레이가 없을 수가 없다 딜레이 때문에 FPS의 헤드샷 같은 정밀한 판정이 필요한 플레이를 구현하기 어렵다 정밀한 플레이는 클라이언트에서 판단하게 하는 경우가 있다 이를 이용해서 핵을 만들 수 있다 Ex) 에임핵 딜레이를 보정하기 위해서 심판은 동작에 대해 오차범위를 둔다(Tolerance) 오차범위를 넘어서는 행동을 해킹이라고 판단한다 오차범위 안에서 이득을 보는 핵은 잡히지 않을 수 있다 검증 변..
https://www.youtube.com/watch?v=CfzYq3GTlX8 P2P Peer to Peer 1 : 1 Host 방식 한 클라이언트를 방장으로 정해서 다른 클라이언트들은 방장과 연결하는 방식 방장이 아닌 클라이언트는 관리해야하는 연결의 수가 적다 방장이 중재자 역할을 할 수 있다 방장이 나갔을 때 처리가 까다롭다 - 방 폭파 or 다른 방장 선출 Fully Connection 모든 클라이언트가 각자 연결하는 방식 누구 하나가 나가도 크게 문제가 되지 않는다 각자 관리해야하는 연결의 수가 많다 P2P의 문제점 인터넷을 접속하는데 공유기를 통한 접속이 일반화되었다 공유기로 인해서 클라이언트의 정확한 위치가 숨겨진다 이로 인해 클라이언트들은 서로의 위치를 알 수 없어서 P2P 연결이 힘들다 이..
Deterministic 같은 입력을 같은 시간에 들어가면 결과가 같다 서로 독립적으로 작동하는 클라이언트이지만 같은 입력을 같은 시간에 입력해서 각 유저가 같은 결과를 보도록 하는 방식 상태를 공유하는 것이 아니라 입력을 주고 받음 중간 상태를 만들기 위해서는 그때까지의 모든 입력이 있어야 한다 결국 중간 접속 처리하기가 힘듬 다른 컴퓨터에 같은 시간에 같은 입력을 넣는가가 문제 지연시간이 존재하기 때문에 같은 입력이 다른 시간에 들어가서 다른 결과가 나온다 - Desync 상태 Desync는 언제 어떻게 생길지 모르기 때문에 잡기가 매우 힘들다 Delay 지연시간만큼의 딜레이를 줘서 입력시간을 동기화하는 방식 쉽고 단순하게 구현 가능 유저가 기다려야 하는 시간이 생긴다 = 딜레이 지연시간이 커졌을 때..
Reliable UDP 신뢰성을 갖는 UDP TCP는 신뢰도를 보장하기 위해서 속도가 느리다 UDP는 속도가 빠르지만 신뢰도가 보장되지 않는다 게임 서버의 경우 네트워크 속도가 느려서 지연시간이 늘어나는 것과 특정 데이터가 누락되는 것 모두가 문제이다 이를 해결하기 위해 신뢰도를 보장하는 UDP를 소프트웨어적으로 만든 것이 Reliable UDP 개발 난이도가 있기 때문에 대형 게임사에서 주로 직접 개발 Unity나 Unreal 같은 툴에서 제공 실시간성이 중요한 게임은 UDP를 사용 - 격투, FPS, AOS 등 실시간성이 덜 중요한 게임은 TCP를 사용 - MMORPG, 보드게임
https://www.youtube.com/watch?v=lAhAdnsIN6I 네트워킹 데이터를 주고 받는 것 데이터 교환은 컴퓨터 내부에서 일어남 -> 일종의 네트워킹 Ex) CPU -> RAM -> HDD or SSD 하지만 보통의 경우 네트워킹은 먼 거리의 컴퓨터 간의 데이터 교환을 말한다 특징 지연시간(Latency) 먼 거리의 컴퓨터가 통신하기 때문에 데이터가 전송되는 시간이 존재 빛이 지구를 1바퀴 도는데 133ms(0.13초) Round Trip Time(RTT) 내가 동작을 지시하고 실제로 동작하는데까지 걸리는 시간 데이터 왕복 시간 RTT가 133ms인 경우 60프레임 기준 8프레임이 소모 빛보다 빠른 것은 없기 때문에 133ms의 한계를 넘을 수 없음 눈속임 등을 통해 최대한 유저가 못..
초혼
'게임 서버' 카테고리의 글 목록