Ruffles เป็นห้องสมุด UDP ที่ได้รับการจัดการอย่างสมบูรณ์ซึ่งออกแบบมาเพื่อประสิทธิภาพสูงและเวลาแฝงต่ำ
มีห้องสมุด RUDP มากมายเช่น Enet, Lidgren, Litenetlib ในขณะที่หลายคนเป็นคนที่ยอดเยี่ยม Ruffles มีจุดมุ่งหมายเพื่อเติมเต็มช่องเดียวที่ไม่ได้เติมเต็มส่วนใหญ่เป็นห้องสมุดที่มีน้ำหนักเบา
เพื่อเปรียบเทียบกับตัวอย่างข้างต้น ENET นั้นน่าทึ่งมากและเป็นสิ่งที่ Ruffles อยากเป็น แต่มันไม่มีการจัดการ Lidgren, Litenetlib และห้องสมุดที่มีการจัดการอื่น ๆ อีกมากมายสามารถรู้สึกป่องเกินไปและมีคุณสมบัติมากมายที่ไม่จำเป็นและพวกเขามักจะช้าลงมาก
Ruffles มีคุณสมบัติมากมายที่ Libs อื่น ๆ ขาด ดูด้านล่างสำหรับบทสรุปและคำอธิบายโดยละเอียดของแต่ละรายการ
โปรโตคอล Ruffles ต้องการความท้าทายที่จะต้องทำให้เสร็จก่อนที่จะสามารถสร้างการเชื่อมต่อได้ ปัจจุบันความท้าทายคือ HashCash เช่นความท้าทายที่จัดหาให้โดยเซิร์ฟเวอร์ Brute Force แก้ไขโดยไคลเอนต์และส่ง (ใช้ฟังก์ชั่นแฮช Fowler-Noll-Vo แทน SHA1 ในปัจจุบัน)
การขยาย DOS ถูกป้องกันโดยกำหนดขนาดข้อความการเชื่อมต่อที่ไม่ได้สัดส่วน นอกจากนี้เนื่องจากความท้าทายในการเชื่อมต่อจึงไม่สามารถคำนวณได้ในการโจมตีเลเยอร์ 4
Ruffles มีช่องเชื่อมต่อจำนวนคงที่ที่สามารถใช้สำหรับการเชื่อมต่อที่รอดำเนินการซึ่ง จำกัด การใช้งานของการโจมตีแบบเติมช่องในชั้น 4 การเชื่อมต่อที่รอดำเนินการมีการหมดเวลาคงที่เพื่อแก้ปัญหาการคำนวณ hashcash ที่มีราคาแพง เนื่องจากนี่เป็นเพียงการ จำกัด การโจมตีสล็อตสล็อต Ruffles จึงมีกลไกความปลอดภัยที่จะต้องแก้ไข HashCash ในข้อความแรก ความท้าทายนี้ถูกสร้างขึ้นโดยไคลเอนต์และเซิร์ฟเวอร์จะตรวจสอบว่าวันที่ที่ใช้เป็นล่าสุดและ IV ยังไม่ได้ใช้งานบังคับให้ลูกค้าต้องคำนวณความท้าทาย HashCash ทุกครั้งที่พวกเขาต้องการเริ่มต้นการจับมือกัน
ด้วยการบรรเทาความปลอดภัยเหล่านี้วิธีเดียวที่จะทำให้เซิร์ฟเวอร์ลงคือการทำให้ทรัพยากร CPU หมดลงทั้งหมด
Ruffles จัดการการจัดการการเชื่อมต่อทั้งหมดให้คุณ มันเป็นโปรโตคอลที่มุ่งเน้นการเชื่อมต่ออย่างสมบูรณ์พร้อมแพ็คเก็ต Heartbeat Keepalive ที่ส่งมาเพื่อให้แน่ใจว่าการเชื่อมต่อยังมีชีวิตอยู่
Ruffles ปราศจากขยะอย่างสมบูรณ์ซึ่งสามารถทำได้ด้วยเครื่องจัดเก็บหน่วยความจำที่กำหนดเองในพื้นที่ GC สิ่งนี้ทำให้มั่นใจได้ว่าไม่มีหน่วยความจำรั่วไหลไปยังตัวเก็บขยะเว้นแต่จะมีการปรับขนาดวัตถุประสงค์ สิ่งนี้ทำให้ ruffles blazing เร็ว นอกจากนี้ยังหลีกเลี่ยงสำเนาหน่วยความจำให้มากที่สุด เนื่องจาก ruffles ยังคงทำงานในพื้นที่ GC หน่วยความจำใด ๆ รั่วไหลใน ruffles จะถูกจัดการโดยนักสะสมขยะและผู้ใช้จะได้รับแจ้งว่าเป็นผู้ทำลายหน่วยความจำถูกเรียกพร้อมกับ stacktrace ของที่หน่วยความจำรั่วไหลออกมาเดิม ดูการใช้งาน
ขณะนี้มีวิธีการส่งข้อความใน ruffles ประเภทคือ:
ข้อความทั้งหมดได้รับการรับประกันว่าจะมีการจัดส่งคำสั่งซื้อจะไม่รับประกันการทำซ้ำจะลดลง ใช้หน้าต่างบานเลื่อนคงที่
ข้อความทั้งหมดได้รับการรับประกันว่าจะส่งมอบคำสั่งซื้อด้วยการรับประกันการทำซ้ำจะถูกทิ้ง ใช้หน้าต่างบานเลื่อนคงที่
ข้อความทั้งหมดได้รับการรับประกันว่าจะส่งมอบคำสั่งซื้อด้วยการรับประกันการทำซ้ำจะถูกทิ้ง ใช้หน้าต่างบานเลื่อนคงที่ อนุญาตให้มีการแยกส่วนข้อความขนาดใหญ่
การจัดส่งไม่ได้รับประกันและเป็นคำสั่ง ซ้ำซ้อนถูกทิ้ง
การจัดส่งไม่ได้รับประกัน แต่คำสั่งซื้อคือ แพ็คเก็ตที่เก่ากว่าและซ้ำซ้อนจะถูกทิ้ง
การจัดส่งไม่ได้รับประกันและเป็นคำสั่ง รายการซ้ำจะไม่ลดลง
แพ็คเก็ต UDP ดิบที่ไม่ต้องการการเชื่อมต่อ
ข้อความทั้งหมดไม่รับประกันว่าจะส่งมอบ หากคุณส่งข้อความหลายข้อความอย่างน้อยหนึ่งรายการก็คือ Guranteed ที่จะมาถึง หากคุณส่งข้อความเดียวรับประกันได้ว่าจะมาถึง ข้อความจะเป็นไปตามลำดับเสมอ ซ้ำซ้อนถูกทิ้ง
ข้อความทั้งหมดได้รับการรับประกันว่าจะมีการจัดส่งคำสั่งซื้อจะไม่รับประกันการทำซ้ำจะลดลง ใช้หน้าต่างบานเลื่อนคงที่ อนุญาตให้มีการแยกส่วนข้อความขนาดใหญ่
Ruffles มีหลายเกลียวและใช้เธรดผู้ปฏิบัติงานพื้นหลังโดยค่าเริ่มต้นเพื่อจัดการเครือข่าย I/O
API สาธารณะทั้งหมดใน ruffles ได้รับการออกแบบให้ปลอดภัยและสามารถเข้าถึงได้จากเธรดใด ๆ
Ruffles ปราศจากการพึ่งพา 100% ดังนั้นจึงพกพาได้มากและควรทำงานบนแพลตฟอร์มส่วนใหญ่
Ruffles รองรับโหมดซ็อกเก็ตคู่ IPv6 มันทำได้โดยใช้ซ็อกเก็ตสองตัวที่ผูกกับพอร์ตเดียวกันดังนั้นจึงทำฟังก์ชั่นสแต็กคู่เต็มรูปแบบที่ผู้ใช้มองไม่เห็น
แพ็คเก็ตขนาดเล็กจะล่าช้าในการส่งสิ่งนี้จะช่วยให้พวกเขาถูกรวมเข้ากับแพ็คเก็ตขนาดใหญ่หนึ่งตัว สิ่งนี้สามารถปิดใช้งานและเปิดใช้งานได้ตามแพ็กเก็ต สามารถกำหนดค่าความล่าช้าและขนาดสูงสุดได้
แพ็คเก็ตสามารถส่งเป็น ReliableSequenceDfragmented หรือ Reliablefragmented ซึ่งช่วยให้แพ็คเก็ตเดี่ยวมีขนาดสูงถึง 2^15*1450 ไบต์ = 47513600 ไบต์ = 47.5 เมกะไบต์
แพ็คเก็ต ACK ถูกรวมเข้ากับ bitfields เพื่อให้มันกะทัดรัดมากขึ้น
สถิติรายละเอียดสามารถเรียกคืนได้จากการเชื่อมต่อรวมถึงไบต์ที่ส่ง, แพ็คเก็ตที่ส่ง, เวลาเดินทางไปกลับและอื่น ๆ
ค้นพบ MTU ที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้สำหรับการเชื่อมต่อแต่ละครั้งโดยอัตโนมัติ
จำกัด จำนวนการรับส่งข้อมูลที่อนุญาตให้ส่งไปยังการเชื่อมต่อ อัลกอริทึมที่กำหนดเองสามารถปรับได้ด้วยอินเตอร์เฟส iBandWidThTracker
นี่คือสิ่งที่ฉันต้องการและวางแผนที่จะเพิ่ม
นี่คือคุณสมบัติที่พิจารณา แต่ไม่ได้ตัดสินใจ นี่คือการป้องกันการขยายตัว
ช่องทางที่กระจัดกระจายในปัจจุบันไม่มีอัตราการไหลสำหรับ ACK กลับมาอีกครั้ง
เนื่องจากข้อผิดพลาด Unity Ruffles ทำงานไม่ถูกต้องใน IL2CPP โดยค่าเริ่มต้น ข้อผิดพลาดได้รับการรายงานถึงความสามัคคี หากคุณต้องการเรียกใช้ ruffles ด้วย IL2CPP ให้รวบรวมมันด้วย สิ่งนี้ได้รับการแก้ไขแล้ว อย่าลังเลที่จะใช้ IL2CPP ในโครงการของคุณMILLISECONDS_SELECT define วิธีนี้จะทำให้วิธีการเลือกซ็อกเก็ตใช้เวลาหมดเวลาตามมิลลิวินาทีแทนไมโครวินาที