Metaverse/Network 8

Protobuf

Protocol Buffers Google에서 개발한 데이터 직렬화 형식으로, 구조화된 데이터를 이진 형식으로 효율적이고 컴팩트하게 저장하여 네트워크 연결을 통해 더 빠르게 전송할 수 있음 작성된 프로그램을 다른 플랫폼으로 쉽게 포팅할 수 있고, 다양한 응용프로그램에서 사용할 수 있는 구조화된 데이터를 만드는 효율적이고 강력한 방법 언어 독립적 구문을 사용하면 선택한 서로 다른 프로그래밍 언어를 사용하여 작성된 프로그램이 서로 안정적으로 통신할 수 있음 구조화된 데이터는 바이너리 형식으로 저장되기 때문에 XML이나 JSON과 같은 텍스트 기반 형식보다 훨씬 작아 네트워크를 통한 전송이 더 빠름 확장하기 쉽게 설계되어 빠르게 변화하는 데이터 구조와 새로운 기능을 처리하는 데 이상적 활용 시스템 간의 데이터..

Metaverse/Network 2024.01.22

게임 네트워크 엔진

프라우드넷의 네트워크 모듈 1. NetServer 클래스: 게임 서버의 메인 모듈 클라이언트의 연결을 받으며, 클라이언트와 메시지를 주고받는 역할을 함 각 클라이언트의 네트워크 상황 등을 열람할 수 있음 2. NetClient 클래스: 게임 클라이언트에서 네트워크 모듈 서버로 연결을 맺은 후 메시지 주고받기를 수행할 수 있음 다른 클라이언트와 P2P 통신도 가능 NetServer 인스턴스를 생성하고 NetServer가 클라이언트 접속을 받으려면 다음 작업이 필요 CNetServer.Create()로 CNetServer 인스턴스를 생성 CNetServer.Start()로 서버가 클라이언트 접속을 받을 수 있게 함 Start()에 들어가는 필수 매개변수는 프로토콜 버전과 리스닝 포트 번호로, 프로토콜 버전은..

Metaverse/Network 2023.07.31

게임 네트워킹

모든 역할을 서버에서 하기 클라이언트가 하는 역할 사용자 입력(키 입력, 마우스 좌표) 화면 출력 서버에서 하는 역할 게임 로직 연산 화면 렌더링 (그래픽 데이터 보유) 화면 송출(비디오 스트리밍) 온라인 게임을 방해하는 레이턴시가 길어지는 요인 서버가 멀리 있으면 네트워킹 중에 레이턴시가 추가됨 클라우드 서버 안에서 가상머신은 다른 가상머신이 CPU 사용량을 잠식하면서 조금씩 지연 시간이 있을 수 있음 패킷 드롭으로 인한 재송신은 간헐적인 큰 지연 시간을 일으킴 인구가 낮은 국가에서는 인터넷이 느림 무선 네트워크에서는 레이턴시와 패킷 드롭률이 크게 증가함 서버 운영의 경제성 문제 고퀄리티 그래픽을 60프레임으로 렌더링하려면 그래픽카드 하나가 모든 능력을 동원해야 함 (서버에서 이것을 하려고 하면 서버에..

Metaverse/Network 2023.07.27

게임 서버와 클라이언트

패키지 게임: 소규모의 플레이어가 같이 모여서 하는 온라인 게임 (Offline이 가능한 경우도 많음), MOG라고도 함 (Multiple Online Game) 서버 플레이어 세 명 이상이 게임을 하려면 그들의 게임 플레이 상태를 저장하는 곳이 필요하고, 이를 위해 플레이어 중 한 명의 컴퓨터가 모든 플레이어의 게임 플레이 상태를 취합하여 유지하는 역할을 해야 함 패키지 게임에서 게임 서버가 하 역할은 지금 플레이어가 두세 명 혹은 많아야 십여 명 참여하여 게임 플레이를 하는 상태, 즉 세션 처리를 담당하는 것 데디케이티드 서버: 클라이언트 프로그램과 같은 엔진을 사용하지만 렌더링과 사용자 입력 처리를 받지 않고, 순전히 클라이언트 연결을 받는 세션을 처리만 하는 프로그램이 따로 운용하는 경우 MUD(..

Metaverse/Network 2023.07.24

Socket Programming

블로킹 : 디바이스에 처리 요청을 걸어 놓고 응답을 대기하는 함수를 호출할 때 스레드에서 발생하는 대기 현상 소켓뿐만 아니라 파일 핸들에 대한 함수를 호출했을 때도 이러한 대기 현상이 발생하는 것을 모두 블로킹이라고 함 송신 버퍼와 수신 버퍼 송신 버퍼: 일련의 바이트 배열이라고 보면 됨 송신 버퍼의 크기는 고정 되어 있으나, 마음대로 크기를 변경할 수 있음 수신 버퍼가 가득 차면 발생하는 현상 수신 함수가 수신 버퍼에서 데이터를 꺼내는 속도가 운영 체제가 수신 버퍼의 데이터를 채우는 속도보다 느리면 TCP 송신 함수로 송신 버퍼에 데이터를 쌓는 속도보다 수신 함수로 수신 버퍼에서 데이터를 꺼내는 속도가 느리다고 해서 TCP 연결은 끊어지지 않음 (실제 송신 속도가 느린 쪽에 맞추어 작동할 뿐) UDP ..

Metaverse/Network 2023.07.24

컴퓨터 네트워크

클라이언트: 사람이 만지는 컴퓨터 서버: 많은 사람들이 만지는 단말기에 서비스를 제공하는 무인 컴퓨터 -> 클라이언트에서 오는 데이터를 받아서 처리한 후 그 결과를 클라이언트에 회신 OSI 모델: 컴퓨터 네트워크 통신에 대한 국제 표준 -> 이 표준만 잘 지키면 어떤 기기든, 어떤 형태의 통신 선로를 사용하든 컴퓨터 간 통신을 할 수 있음 계층 1: 물리계층 계층 2: 데이터 링크 계층 계층 3: 네트워크 계층 계층 4: 전송 계층 계층 5: 세션 계층 계층 6: 표현 계층 계층 7: 응용 계층 OSI 모델의 계층 2 각 단말기는 고유한 주소를 가짐 단말기는 데이터를 프레임이라는 단위로 주고 받음 보다 많은 컴퓨터를 연결할 때의 문제점 스위치 하나가 연결할 수 있는 단말기 수가 제한되어 있음 단말기들 각..

Metaverse/Network 2023.07.24

Multi Threading

"프로그램을 실행하면 프로세스가 생성됨. 프로세스 안에는 유일한 쓰레드가 있고 그 안에 프로그램 실행" 멀티쓰레드 프로그래밍 활용 용도) 기기에 있는 CPU(Core)를 모두 활용해야 할 때 Single Core의 사용량이 100%가 되지 않으면 멀티쓰레드 프로그래밍을 절대 하면 안됨 오래 걸리는 일 1개와 빨리 끝나는 일 여러 개 같이 해야 할 때 어떤 긴 처리를 진행하는 동안 다른 짧은 일 처리해야 할 때 -> 비동기 IO를 사용하여 프로세스가 I/O의 완료를 기다리지 않게 함 기기에 있는 CPU 모두 활용해야 할 때 (싱글 코어에서 처리 불가하고 CPU의 클럭을 몇 배 높여야 해결될 작업인 경우) ex) FPS 쓰레드의 정체 : "두 가지 일을 동시에 하라"라고 시켰을 때 운영체제는 두 개의 작업을..

Metaverse/Network 2023.07.24

REST / REST API

REST란? 정의) Representational State Transfer의 약자 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미 자원의 표현에 의한 상태 전달 자원의 표현 자원: 해당 소프트웨어가 관리하는 모든 것 자원의 표현: 그 자원을 표현하기 위한 이름 상태(정보) 전달 데이터가 요청되는 시점에서 자원의 상태(정보)를 전달함 JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적 월드와이드웹(WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식 REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일 REST는 네트워크 상에서 클라이언트와 서버 사이의 통..

Metaverse/Network 2023.02.11