Ruffles هي مكتبة UDP المدارة بالكامل مصممة للأداء العالي والكمون المنخفض.
هناك العديد من مكتبات RUDP مثل Enet و Lidgren و Litenetlib. في حين أن العديد منهم رائعون ، يهدف Ruffles إلى ملء مكانة واحدة غير مملوءة إلى حد كبير ، أن تكون مكتبات خفيفة الوزن بالكامل.
للمقارنة مع الأمثلة المذكورة أعلاه ، فإن Enet مدهش وهو ما يريده Ruffles إلى حد كبير ، لكنه غير مُدار. يمكن أن تشعر Lidgren و Litenetlib والعديد من المكتبات المدارة الأخرى بالانتفاخ الشديد وتحتوي على العديد من الميزات غير الضرورية وغالبًا ما تكون أبطأ بكثير.
لدى الكشكشة العديد من الميزات التي تفتقر إليها libs الأخرى. انظر أدناه للحصول على ملخص وشرح مفصل لكل منهما.
يتطلب بروتوكول الكشكشة إكمال تحد قبل إنشاء اتصال. في الوقت الحالي ، فإن التحدي هو التحدي مثل التحدي الذي يقدمه الخادم ، والقوة الغاشمة التي حلها العميل وتقديمها. (يستخدم وظيفة تجزئة Fowler-Noll-Vo بدلاً من SHA1 حاليًا).
يتم منع تضخيم DOS من خلال طلب أحجام رسائل اتصال غير قابلة للاتصال. بالإضافة إلى ذلك ، نظرًا لتحدي الاتصال ، فليس من الممكن مهاجمة على الطبقة 4.
لدى Ruffles كمية ثابتة من فتحات الاتصال التي يمكن استخدامها للاتصالات المعلقة ، وهذا يحد من قابلية استخدام هجمات ملء الفتحات على الطبقة 4. الوصلات المعلقة لها مهلة ثابتة لحل تحدي HashCash باهظ التكلفة قبل أن يتم الخروج منها ، وستتوفر الفتحة مرة أخرى بعد ذلك. نظرًا لأن هذا يحد فقط من هجمات ملء الفتحات ، فإن الكشكشة لديها أيضًا آلية أمنية حيث يجب حل hashcash في الرسالة الأولى. يتم إنشاء هذا التحدي من قبل العميل وسيتحقق الخادم من أن التاريخ المستخدم حديثًا وأن IV لم يتم استخدامه بالفعل ، مما يجبر العملاء على إعادة حساب تحدي HashCash في كل مرة يرغبون فيها في تهيئة المصافحة.
مع هذه التخفيفات الأمنية ، فإن الطريقة الوحيدة لإسقاط الخادم هي استنفاد جميع موارد وحدة المعالجة المركزية.
تتعامل الكشكشة مع جميع إدارة الاتصال لك. إنه بروتوكول موجه نحو الاتصال بالكامل مع حزم Keepalive Heartbeat التي يتم إرسالها لضمان حية الاتصال.
Ruffles خالية من القمامة بالكامل ، ويتم ذلك مع مخصص الذاكرة المخصص في مساحة GC. هذا يضمن عدم تسرب أي ذاكرة إلى جامع القمامة ما لم يكن لأغراض تغيير حجمها. وهذا يجعل الكشكشة النيران بسرعة. كما أنه يتجنب نسخ الذاكرة قدر الإمكان. نظرًا لأن الكشكشة لا تزال تعمل في مساحة GC ، فسيتم التعامل مع أي تسرب ذاكرة في الكشكشة من قبل جامع القمامة وسيتم إخطار المستخدم حيث يتم استدعاء تدمير الذاكرة مع مجموعة من حيث تم تخصيص الذاكرة التي تم تسريبها في الأصل. انظر التنفيذ.
يوجد حاليًا بعض الطرق لإرسال الرسائل في الكشكشة. الأنواع هي:
جميع الرسائل مضمونة لتسليمها ، لا يتم ضمان الطلب ، ويتم إسقاط التكرارات. يستخدم نافذة منزلق ثابتة.
جميع الرسائل مضمونة لتسليمها مع ضمان الطلب أيضًا ، يتم إسقاط التكرارات. يستخدم نافذة منزلق ثابتة.
جميع الرسائل مضمونة لتسليمها مع ضمان الطلب أيضًا ، يتم إسقاط التكرارات. يستخدم نافذة منزلق ثابتة. يسمح للرسائل الكبيرة بالتجزئة.
التسليم غير مضمون ولا هو الطلب. يتم إسقاط التكرارات.
التسليم غير مضمون ولكن الطلب هو. يتم إسقاط الحزم القديمة والتكرارات.
التسليم غير مضمون ولا هو الطلب. لا يتم إسقاط التكرارات.
حزم UDP الخام التي لا تتطلب اتصال.
جميع الرسائل غير مضمونة لتسليمها. إذا قمت بإرسال رسائل متعددة ، فسيتم الوصول إلى رسائل متعددة على الأقل. إذا أرسلت رسالة واحدة ، فمن الضمان الوصول. ستكون الرسائل دائمًا بالترتيب. يتم إسقاط التكرارات.
جميع الرسائل مضمونة لتسليمها ، لا يتم ضمان الطلب ، ويتم إسقاط التكرارات. يستخدم نافذة منزلق ثابتة. يسمح للرسائل الكبيرة بالتجزئة.
Ruffles متعدد الخيوط أصلاً ويستخدم مؤشر ترابط عامل الخلفية افتراضيًا للتعامل مع الشبكة I/O.
تم تصميم جميع واجهات برمجة التطبيقات العامة في الكشكشة لتكون آمنة الخيط ويمكن الوصول إليها من أي موضوع.
RUFREFLES خالية من التبعية بنسبة 100 ٪ ، وبالتالي فهي محمولة للغاية ويجب أن تعمل على معظم المنصات.
Ruffles يدعم وضع المقبس IPv6 المزدوج. يقوم بذلك عن طريق استخدام مآخذين مرتبطين بنفس المنفذ ، وبالتالي إنجاز وظائف المكدس المزدوجة الكاملة غير المرئية للمستخدم.
سيتم تأخير الحزم الصغيرة للإرسال ، وهذا يسمح بدمجها في حزمة واحدة أكبر. يمكن تعطيل ذلك وتمكينه على أساس لكل حزمة. يمكن أيضًا تكوين حجم التأخير والحد الأقصى لدمج.
يمكن إرسال الحزم على أنها Reliablesequencedfragmented أو موثوقة ، والتي تتيح أن تكون حزمة واحدة بحجم ما يصل إلى 2^15*1450 بايت = 47513600 بايت = 47.5 ميغابايت.
يتم دمج حزم ACK في Bitfields لجعلها أكثر إحكاما.
يمكن استرداد إحصائيات مفصلة من الاتصالات ، بما في ذلك البايتات المرسلة ، والحزم المرسلة ، وأوقات رحلة ذهابًا وإيابًا وأكثر.
يكتشف تلقائيًا أكبر MTU الممكن لكل اتصال.
الحد من مبلغ حركة المرور المسموح به إلى اتصال. يمكن تكييف الخوارزميات المخصصة مع واجهة iBandwidThTracker.
هذه أشياء أريدها وأخطط لإضافتها
فيما يلي الميزات التي يتم اعتبارها ولكنها لم تقرر. هذا لمنع الانتفاخ.
لا تحتوي القناة المجزأة حاليًا على أي معدل تدفق لـ ACK.
بسبب وجود خطأ في الوحدة ، لا يعمل الكشكش بشكل صحيح في IL2CPP افتراضيًا. تم الإبلاغ عن الخطأ إلى الوحدة. إذا كنت بحاجة إلى تشغيل الكشكشة باستخدام IL2CPP ، فقم بتجميعها مع تعريف وقد تم تصحيح هذا. لا تتردد في استخدام IL2CPP في مشروعك.MILLISECONDS_SELECT . سيؤدي ذلك إلى جعل طريقة socket.select استخدام مهلة تعتمد على ميلي ثانية بدلاً من microseconds.