librg 는 데이터 전송 라이브러리(네트워킹, 파일 스트리밍 등)와 핵심 애플리케이션/게임 로직 간의 미들웨어 역할을 하는 경량 라이브러리입니다.
도서관의 주요 책임은 다음과 같습니다.
라이브러리는 멀티 플레이어 게임과 전용 게임 서버의 흐름을 설정하고 관리하는 복잡성을 해결하기 위해 탄생했습니다. 그것은 필수적이지 않은 것들을 제거하고 오늘날 여러분이 보고 사용할 수 있는 현재의 형태로 천천히 조각하는 데 큰 도움이 되었습니다.
일반적으로 네트워크로 연결된 게임 세계는 네트워크로 연결된 플레이어 집합과 네트워크로 연결된 여러 엔터티로 구성됩니다. 엔터티와 플레이어 간의 동기화 관계를 설정하는 일반적인 변형은 Everything-to-Everyone 연결을 설정하는 것입니다.
이것이 따라야 할 가장 기본적인 설정입니다. 그러나 엔터티 수가 증가하면 대역폭이 다소 비효율적이 됩니다.
librg를 사용하면 반경 및 가시성 기반 엔터티 관계를 구축하여 대역폭 사용량을 상당히 줄일 수 있습니다. 엔터티는 표시되는 플레이어와만 동기화됩니다.
라이브러리의 전체 인터페이스는 대부분의 네트워크 라이브러리 지원을 염두에 두고 만들어졌습니다.
네트워킹 라이브러리는 다음을 지원해야 합니다.
char *
버퍼를 보내고 받는 기능그리고 그게 거의 전부입니다!
지원되는 라이브러리 종류 목록은 다음과 같습니다.
ENet
GameNetworkingSockets
yojimbo
SLikeNet
KCP
Raknet
Websocket
WebRTC
UDP
또는 TCP
기반 라이브러리참고: enet의 네트워크 통합에 대한 예를 확인할 수 있습니다.
librg
는 단일 헤더 라이브러리입니다. 즉, 이 라이브러리를 사용하려면 이 저장소의 릴리스 섹션에서 해당 헤더 파일의 최신(또는 특정) 버전을 가져와 프로젝트에 추가하기만 하면 됩니다. 그러면 이점을 누릴 수 있습니다. .
또는 CLI에 익숙하다면 다음을 수행할 수도 있습니다.
curl -L https://github.com/zpl-c/librg/releases/latest/download/librg.h > librg.h
# OR
wget https://github.com/zpl-c/librg/releases/latest/download/librg.h -O librg.h
네트워킹 라이브러리입니까?
네트워킹 라이브러리를 사용할 수 있나요?
UDP
만큼 낮은 수준부터 WebSocket
/ WebRTC
까지 될 수 있습니다. 저장소에는 여러 개의 *.h
및 *.c
파일이 포함되어 있는데 단일 헤더 라이브러리라고 제안했는데 어떻게 가능합니까?
librg는 엔터티 시스템을 제공합니까?
데이터를 어떻게 압축하나요? 이에 대한 방법을 제공하나요?
protobuf
, flatbuffers
, msgpack
등)를 사용하거나 직접 구현해야 합니다.청크를 언급하신 것 같은데, 제 게임/앱이 청크 기반이어야 한다는 뜻인가요?
라이브러리에 대한 자세한 문서를 읽고 예제와 빠른 시작 가이드를 보려면 문서 페이지를 방문하세요.
또한 실제 코드 예제는 code/apps 폴더에서 확인할 수 있습니다.
다음은 4x4 청크로 구성된 단순한 2D 세계에서 라이브러리가 작동하는 방식을 복제하려는 간단한 그림입니다. 더 큰 크기의 3D 세계에서는 모든 것이 3차원에서만 매우 유사한 방식으로 작동합니다.
그리고 이 그림은 데이터를 인코딩하고 디코딩하는 데 사용되는 기본 바이너리 프로토콜의 구조를 보여줍니다. 결과 바이너리 버퍼는 다른 버퍼에 삽입되거나 디스크에 파일로 저장되거나 사용 가능한 방법을 사용하여 네트워크를 통해 전송될 수 있습니다. 패킷 내의 모든 엔터티와 함께 사용자 지정 데이터를 배치하면 기능을 확장하고 메모리 및 대역폭 효율적인 엔터티 복제를 허용하는 상황에 따른 데이터 스토리지가 가능해집니다.
v6.0.0
이전 버전의 라이브러리를 사용했다면 여기에 있는 마이그레이션 가이드를 읽어보는 것이 좋습니다.
우리는 다양한 플랫폼에 대한 라이브러리를 테스트하고 있습니다. 이 표는 호환성에 대한 일종의 설명을 제공합니다. 테스트한 결과가 표의 결과와 다른 경우 문제에 대해 자유롭게 설명해주세요.
플랫폼/결과 | 윈도우 | macOS | 리눅스 | iOS | 기계적 인조 인간 | 라즈베리 파이 | 오픈BSD | FreeBSD | 엠스크립트 |
---|---|---|---|---|---|---|---|---|---|
❔ | 그 소리 | 그 소리 | gcc, 땡땡이 | gcc, 땡땡이 | gcc, 땡땡이 | ||||
✅ | msvc, 밍그 | gcc, 땡땡이 | gcc, 땡땡이 | emcc |
기여하고 싶거나, 새로운 기능을 추가하거나, 최적화하거나, 전체적인 개선을 하고 싶다면, 그 방법에 대한 지침은 다음과 같습니다.
git clone https://github.com/zpl-c/librg.git
make
실행하여 모든 프로젝트를 빌드하고 모든 것이 작동하는지 확인하세요.code/tests/
에 테스트를 추가하세요.make test
다시 실행하여 확인합니다. Windows 에서 작업 중이거나 make
사용할 수 없는 경우 내장 cmake
구성 파일을 사용하여 Visual Studio 솔루션을 생성할 수도 있습니다.
mkdir build
cd build
cmake ../misc -G"Visual Studio 16 2019"
(또는 가지고 있는 모든 구성)cmake --open .
(솔루션으로 VS를 엽니다)개발자에게는 다음과 같은 좋은 이점을 제공합니다.