librg เป็นไลบรารีขนาดเล็กที่ทำหน้าที่เป็นมิดเดิลแวร์ระหว่างไลบรารีการถ่ายโอนข้อมูล (ระบบเครือข่าย การสตรีมไฟล์ ฯลฯ) และตรรกะของแอปพลิเคชัน/เกมหลัก
ความรับผิดชอบหลักของห้องสมุด ได้แก่ :
ไลบรารีนี้ถือกำเนิดขึ้นเพื่อแก้ปัญหาความซับซ้อนในการตั้งค่าและจัดการโฟลว์ของเกมที่มีผู้เล่นหลายคนและเซิร์ฟเวอร์เกมเฉพาะ มันมาไกลมากในการดึงสิ่งที่ไม่จำเป็นออกไป และค่อยๆ แกะสลักเป็นรูปแบบปัจจุบัน ซึ่งคุณสามารถมองเห็นและใช้งานได้ในปัจจุบัน
โดยปกติแล้ว โลกของเกมที่เชื่อมต่อเครือข่ายจะประกอบด้วยชุดของผู้เล่นที่เชื่อมต่อเครือข่ายและเอนทิตีที่เชื่อมต่อเครือข่ายจำนวนหนึ่ง รูปแบบทั่วไปของการตั้งค่าความสัมพันธ์การซิงโครไนซ์ระหว่างเอนทิตีและผู้เล่นคือการตั้งค่าการเชื่อมต่อทุกอย่างต่อทุกคน
นี่คือการตั้งค่าพื้นฐานที่สุดที่ต้องปฏิบัติตาม อย่างไรก็ตาม ด้วยจำนวนเอนทิตีที่เพิ่มขึ้น แบนด์วิธจึงค่อนข้างไม่มีประสิทธิภาพ
ด้วย 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
ฯลฯ ) หรือดำเนินการของคุณเองฉันเห็นคุณพูดถึงชิ้นเนื้อหา หมายความว่าเกม/แอปของฉันควรเป็นแบบชิ้นใช่ไหม
หากต้องการอ่านเอกสารโดยละเอียดเกี่ยวกับห้องสมุด ดูตัวอย่าง และคู่มือเริ่มต้นใช้งานฉบับย่อ โปรดไปที่หน้าเอกสารประกอบของเรา
นอกจากนี้ คุณสามารถตรวจสอบโฟลเดอร์โค้ด/แอปเพื่อดูตัวอย่างโค้ดจริงได้
นี่คือภาพประกอบง่ายๆ ที่พยายามจำลองวิธีการทำงานของห้องสมุดในโลก 2 มิติที่เรียบง่ายขนาด 4x4 ชิ้น สำหรับโลก 3 มิติที่ใหญ่กว่า ทุกอย่างจะทำงานในลักษณะเดียวกัน แค่ใน 3 มิติเท่านั้น
และรูปภาพนี้แสดงโครงสร้างของโปรโตคอลไบนารี่พื้นฐานที่ใช้ในการเข้ารหัสและถอดรหัสข้อมูลจาก/ถึง บัฟเฟอร์ไบนารี่ที่ได้สามารถแทรกลงในบัฟเฟอร์อื่น บันทึกลงในดิสก์เป็นไฟล์ หรือส่งผ่านเครือข่ายโดยใช้วิธีใดก็ได้ที่มี การวางข้อมูลที่กำหนดเองควบคู่ไปกับทุกเอนทิตีภายในแพ็กเก็ตช่วยให้สามารถจัดเก็บข้อมูลตามบริบทที่ขยายขีดความสามารถและอนุญาตการจำลองเอนทิตีหน่วยความจำและแบนด์วิธที่มีประสิทธิภาพ
หากคุณเคยใช้ไลบรารีก่อนเวอร์ชัน v6.0.0
ขอแนะนำให้อ่านคู่มือการย้ายข้อมูลที่นี่
เรากำลังทดสอบไลบรารีสำหรับแพลตฟอร์มต่างๆ ตารางนี้แสดงคำอธิบายบางประการเกี่ยวกับความเข้ากันได้ หากคุณได้ทดสอบแล้ว และผลลัพธ์ของคุณแตกต่างไปจากผลลัพธ์ในตาราง โปรดอธิบายปัญหาในประเด็นต่างๆ ได้ตามใจชอบ
แพลตฟอร์ม / ผลลัพธ์ | หน้าต่าง | ระบบปฏิบัติการ macOS | ลินุกซ์ | ไอโอเอส | หุ่นยนต์ | ราสเบอร์รี่ปี่ | OpenBSD | ฟรีBSD | เอ็มสคริปเทน |
---|---|---|---|---|---|---|---|---|---|
เสียงดังกราว | เสียงดังกราว | gcc เสียงดังกราว | gcc เสียงดังกราว | gcc เสียงดังกราว | |||||
msvc, มิงว | gcc เสียงดังกราว | gcc เสียงดังกราว | อีเอ็มซี |
หากคุณต้องการมีส่วนร่วม เพิ่มคุณสมบัติใหม่ การเพิ่มประสิทธิภาพ หรือการปรับปรุงโดยรวม ต่อไปนี้เป็นคำแนะนำเกี่ยวกับวิธีการดำเนินการดังกล่าว:
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 พร้อมโซลูชัน)สำหรับนักพัฒนา ข้อเสนอนี้มีประโยชน์มากมาย: