728x90
반응형

Game Development, 게임개발/게임네트워크 8

Postman Tutorial - 1 (사용 목적, UI)

우체부라는 뜻을 가진 Postman https://www.postman.com/ Postman API Platform | Sign Up for Free Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster. www.postman.com 왜 쓰는 것일까? 알아보자 Postman is an API platform for building and using APIs Postman simplifies each step of the API lifecycle and..

멀티 플레이 환경에서의 클라이언트와 서버 - 1, 구조

서버와 통신하는 이유는 여러 가지가 있겠지만 멀티 플레이 환경에서 가장 첫 번째 이유는 공정성이다. 싱글 플레이에서 유저가 어떤 행동을 하든 조작을 하든 다른 유저에게 피해를 끼치지 않는다. 저러면 게임이 하고 싶을까? 각 방마다 저러면 내가 게임을 할 수 있을까? 클라이언트를 직접 조작하는 것은 막지 못한다. 하지만 서버와의 연결을 거친다면 클라이언트의 변조를 막을 수 있다. 이것이 멀티 플레이 게임의 가장 중요한 요소인 공정성이다. 모두 다 같은 환경에서 플레이해야만 멀티플레이의 의미가 생기는 것이다. 쉽게 생각하면 모든 게임의 연산을 서버에서 하면 되는거 아냐? 라고 생각한다. 이것을 Authoritative Server라고 하는데 이는 서버에서 연산을 처리하여 클라이언트가 받아서 쓰는 방식이다. ..

Client - side Prection, 클라이언트 단 예측

[Game Developer, 게임개발자/게임네트워크] - 멀티플레이 게임과 네트워크 지연 이 글의 연장이 되는 글이다. 알아보자 우선 가장 중요한 플레이어의 입력에 대해서 알아보려고 한다. 일반적으로 움직임은 클라이언트가 직접 계산하지만 여러 멀티플레이어의 게임은 의도치 않은 상황을 막기 위해 입력조차도 서버권한으로 관리하는 경우가 많다. 하지만 이 때 걸리는 Latency가 높아서 우리는 예측을 하는 것이다. 즉, 우리가 가장 먼저 해야하는 것은 움직임 자체를 클라이언트에서 연산하여 작동하는 것을 비활성화 시켜야 한다. 다시 말하자면 클라이언트는 서버 응답에 관해서 작동을 해야하지 그냥 실제로 클라이언트의 값대로 동작하면 안된다는 말이다. 우선 플레이어를 움직이는 로직을 보자. public class..

멀티플레이 게임과 네트워크 지연

네트워크 지연은 게임에 있어서 가장 중요한 요소 중 하나다. 소위 우리는 말하길 핑이라고 하는데 핑이 낮다는것이 지연율이 낮다는 것이다. 즉, 우리가 서버에 보낸 요청이 응답이 바로 되어 게임에 적용되는 그 사이 시간이 짧다는 것이다. 더 자세히 알아보자 네트워크 지연이란? 싱글 플레이 게임이나 Local Area Network를 사용하는 게임들은 지연에 대해 걱정할 필요가 없다. 1. 지터(파형에 변형이 일어남) 2. RTT(시작 지점에서 대상 지점으로 이동하고 시작 지점으로 다시 이동하는 데 걸리는 시간) 3. Packet Loss(패킷이 전달되지 못해서 유실됨) 어떠한 이유로든 서버와 클라이언트 사이에 정보를 보내거나 받는 작업이 생긴다면 위와 같은 문제에 대해 다시 생각해봐야한다. 그냥 정보를 보..

Socket으로 통신 라이브러리 만들기

**읽고 외운다기보다 그냥 이런 식으로 진행되며 각 라인을 의미를 파악하는 것이 중요 라이브러리를 만드는 이유는 간단하다. 지속적으로 통신을 유지하기 위함이다. 통신의 기본은 접속, 송신, 수신, 접속 종료로 나눌 수 있다. 이를 실행하려면 Socket 클래스의 인스턴스를 참조해야 하므로 송수신이 이루어지는 곳마다 Socket 클래스의 인스턴스를 참조하는 코드를 작성해야 한다. 하지만 게임 프로그램 전체로 보면 Socket 클래스의 인스턴스는 게임 처리와 별도로 관리하고 싶다는 생각이 든다. 게임 프로그램에는 다른 단말과 통신만 하면 되는 것이지 굳이 Socket 클래스의 인스턴스를 다뤄야 하는가? 라는 의문이 생긴다. 그래서 모든 통신 방식이 비슷하다면 게임마다 따로 작성할 필요 없이 라이브러리에서 가..

TCP,UDP 소켓프로그래밍, C# - 소켓 생성부터 종료까지

게임 네트워크를 알아보는데 직접 해보는 것만큼 도움되는 것이 없다. 소켓 프로그래밍을 해보자. 우선 소켓이란 TCP와 UDP를 간단하게 다루기 위한 통신 API이다. IP 주소와 포트 번호를 같이 묶어서 상대를 지정하고 통신하는 것이다. 통신 상대로는 네트워크로 연결된 단말이나 같은 단말 내의 어플리케이션이 가능하다. **같은 네트워크 안에 있는 다른 컴퓨터나 컴퓨터 안에서의 프로세스라고 하면 되겠다. 네트워크로 연결된 단말을 지정하여 통신하려면 어느 단말의 어플리케이션과 통신할 것인지 정해야 한다. 실제로 통신할 때는 물리적으로 케이블을 포트에 연결하여 단말끼리 접속한다. 소켓은 말 그대로 어플리케이션에 가상으로 존재하는 이더넷 포트를 말한다. 소켓으로 통신할 때는 소켓이 지정한 포트에 전용 이더넷 포..

온라인 게임에서 TCP 보다 UDP를 사용하는 이유

[컴퓨터(Computer Science)/네트워크, Network] - TCP vs UDP 비교 우선 TCP와 UDP는 위와 같다. 생각해보면 UDP는 속도만 빠르지 제대로 데이터가 전달되는지도 몰라서 온라인 게임에선 정확한게 중요하지 않을까? 생각하면서 TCP가 적용된다고 생각하는 사람이 많다. 그러나 현업에선 오히려 UDP가 더 많이 쓰인다고 한다. 왜 정확한 것보다 빠른 것을 쓰는 것일까? TCP의 특징 중 하나인 데이터를 주고 받을 때 순서와 전송을 보장하는 특성이 오히려 온라인 게임에서 방해가 된다는 이유 때문이다. 전달을 보증하는 TCP는 송신한 세그먼트가 유실되었다고 판단하면 재전송을 한다. 도대체 이것이 무엇을 방해하는 것일까? 일반적으로 TCP는 세그먼트 송신후 재전송 타임아웃(RTO) ..

게임네트워크를 따로 생각해야하는 이유

우리는 네트워크를 배워봤다. 또한 네트워크 지식을 알고 있다. 하지만 우리는 그 지식이 도움은 되겠지만 직접적으로 게임에서 일어나는 통신에 대해서 40% 정도 밖에 도움이 되지 않는다. 그것은 뭐 때문일까? 온라인 게임을 만들 때 고도의 기술력이 필요하다고 생각할 수 있다. 하지만 이미 우리가 배웠던 것으로도 충분히 구현할 수 있다고 한다. 하지만 앞서 말했듯이 왜 우리가 배웠던 것은 40% 정도밖에 도움되지 않는 것일까? 기본적인 통신은 정보를 보내고, 받고, 그 정보를 반영하면 된다. 즉, 게임에서 일어나는 통신은 간단하다. 다만 중요한 것은 언제 보내며, 어느 빈도로 보낼 것이며, 뭘 어떻게 보낼 것인가.. 라는 구체적인 문제가 생긴다. 떄문에 우리가 아무리 네트워크 지식이 뛰어나더라도 게임에 대한..

728x90
반응형