RMNP มุ่งหวังที่จะรวมข้อดีทั้งหมดของ TCP และความเร็วของ UDP เพื่อให้เร็วพอที่จะรองรับเกมเรียลไทม์สมัยใหม่ เช่น เกมยิงมุมมองบุคคลที่หนึ่ง โดยพื้นฐานแล้วมันเป็นส่วนขยายสำหรับ UDP
สิ่งที่ไม่ดีเกี่ยวกับ TCP ก็คือเมื่อแพ็กเก็ตถูกทิ้ง มันจะหยุดส่งแพ็กเก็ตอื่นๆ ทั้งหมดจนกว่าจะมีการส่งมอบแพ็กเก็ตที่ขาดหายไป นี่อาจเป็นปัญหาใหญ่สำหรับเกมที่ต้องคำนึงถึงเวลา เนื่องจากไม่ใช่เรื่องแปลกที่อุปกรณ์จะพบกับการสูญเสียแพ็กเก็ต ดังนั้น RMNP จึงอำนวยความสะดวกให้กับ UDP เพื่อรับประกันการจัดส่งที่รวดเร็วโดยไม่มีข้อจำกัดใดๆ เนื่องจาก UDP เป็นแบบไร้สัญชาติ RMNP จึงใช้วิธีง่ายๆ ในการจัดการการเชื่อมต่อและแยกแยะระหว่างไคลเอ็นต์ที่ "เชื่อมต่อ" ทุกแพ็กเก็ตจะมีส่วนหัวขนาดเล็กซึ่งส่วนใหญ่ประกอบด้วยแฮช CRC32 เพื่อให้แน่ใจว่าแพ็กเก็ตที่ได้รับทั้งหมดจะถูกส่งอย่างถูกต้อง
เพื่อรับประกันความน่าเชื่อถือ ผู้รับจะส่งแพ็กเก็ตการตอบรับกลับมาเพื่อแจ้งให้ผู้ส่งทราบว่าได้รับแพ็กเก็ตใด ผู้ส่งจะส่งแต่ละแพ็กเก็ตอีกครั้งจนกว่าจะได้รับการตอบรับหรือถึงระยะหมดเวลาสูงสุด เนื่องจาก RMNP นั้นไม่น่าเชื่อถือ 100% แต่สามารถสันนิษฐานได้ว่าจะมีการส่งมอบแพ็กเก็ต เว้นแต่ไคลเอนต์จะมีการสูญเสียแพ็กเก็ตประมาณ 100% เป็นเวลาสองสามวินาที
go get github.com/obsilp/rmnp
ตัวอย่างเซิร์ฟเวอร์ปอง
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
ตัวอย่างไคลเอนต์ปิง
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
สามารถรับเหตุการณ์และแพ็กเก็ตที่ได้รับได้โดยการตั้งค่าการโทรกลับ ดูชั้นเรียนที่เกี่ยวข้องสำหรับข้อมูลเพิ่มเติม
ลูกค้าโทรกลับ | การเรียกกลับของเซิร์ฟเวอร์
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ใบอนุญาต