0x5C2AAD80
Quicnet هو تنفيذ .NET لبروتوكول QUIC المذكور أدناه. يبقى التنفيذ يتماشى مع الإصدار 32 من مسودة نقل QUIC ، ولا يقدم بعد تنفيذ المسودات ذات الصلة التالية:
الحد الأدنى من أمثلة العمل
using System ;
using System . Text ;
using QuicNet ;
using QuicNet . Streams ;
using QuicNet . Connections ;
namespace QuickNet . Tests . ConsoleServer
{
class Program
{
// Fired when a client is connected
static void ClientConnected ( QuicConnection connection )
{
connection . OnStreamOpened += StreamOpened ;
}
// Fired when a new stream has been opened (It does not carry data with it)
static void StreamOpened ( QuicStream stream )
{
stream . OnStreamDataReceived += StreamDataReceived ;
}
// Fired when a stream received full batch of data
static void StreamDataReceived ( QuicStream stream , byte [ ] data )
{
string decoded = Encoding . UTF8 . GetString ( data ) ;
// Send back data to the client on the same stream
stream . Send ( Encoding . UTF8 . GetBytes ( "Ping back from server." ) ) ;
}
static void Main ( string [ ] args )
{
QuicListener listener = new QuicListener ( 11000 ) ;
listener . OnClientConnected += ClientConnected ;
listener . Start ( ) ;
Console . ReadKey ( ) ;
}
}
} using System ;
using System . Text ;
using QuicNet . Connections ;
using QuicNet . Streams ;
namespace QuicNet . Tests . ConsoleClient
{
class Program
{
static void Main ( string [ ] args )
{
QuicClient client = new QuicClient ( ) ;
// Connect to peer (Server)
QuicConnection connection = client . Connect ( "127.0.0.1" , 11000 ) ;
// Create a data stream
QuicStream stream = connection . CreateStream ( QuickNet . Utilities . StreamType . ClientBidirectional ) ;
// Send Data
stream . Send ( Encoding . UTF8 . GetBytes ( "Hello from Client!" ) ) ;
// Wait reponse back from the server (Blocks)
byte [ ] data = stream . Receive ( ) ;
Console . WriteLine ( Encoding . UTF8 . GetString ( data ) ) ;
// Create a new data stream
stream = connection . CreateStream ( QuickNet . Utilities . StreamType . ClientBidirectional ) ;
// Send Data
stream . Send ( Encoding . UTF8 . GetBytes ( "Hello from Client2!" ) ) ;
// Wait reponse back from the server (Blocks)
data = stream . Receive ( ) ;
Console . WriteLine ( Encoding . UTF8 . GetString ( data ) ) ;
Console . ReadKey ( ) ;
}
}
}QUIC هو بروتوكول موحد طبقة النقل يتوافق مع RFC 9000 المصمم من Google ، بهدف تسريع نقل بيانات تطبيقات الويب الموجهة نحو الاتصال. يهدف بروتوكول مستوى التطبيق هذا إلى التبديل من TCP إلى UDP باستخدام عدة تقنيات لتشبه نقل TCP مع تقليل مصافحة الاتصال ، وكذلك لتوفير تقنيات التعدد المعقولة بطريقة يمكن تشابها كيانات البيانات المختلفة أثناء النقل.
الاتصالات هي القنوات المنطقية الأولى التي تمثل اتصالًا بين نقطتين نهائيتين. عند إنشاء اتصال ، يتم التفاوض على معرف الاتصال بين نقطتي النهاية. يتم استخدام معرف الاتصال لتحديد الاتصال حتى إذا حدثت التغييرات على طبقات البروتوكول السفلي ، مثل تغيير Wi-Fi أو التبديل من Wi-Fi إلى بيانات الهاتف المحمول. تسمى هذه الآلية ترحيل الاتصال الذي يمنع إعادة تشغيل تدفق التفاوض وإعادة تركيب البيانات.
التدفقات هي القنوات المنطقية من الدرجة الثانية التي تمثل تدفقات البيانات. يمكن أن يكون للاتصال الفردي عدد من التدفقات (8 كحد أقصى على سبيل المثال) والتي تعمل ككيانات متعددة الإرسال. كل دفق يحتوي على معرف الدفق الذي تم إنشاؤه ، يستخدم لتحديد كائنات البيانات المختلفة التي يتم نقلها. يتم إغلاق التدفقات عند قراءة جميع البيانات ، أو يتم الوصول إلى الحد الأقصى للبيانات.
الحزم هي وحدات نقل البيانات. يحتوي رأس الحزمة على معلومات حول الاتصال الذي يتم إرسال هذه الحزمة إلى معلومات التشفير. بعد تجريد معلومات النقل الإضافية ، ما تبقى هو إطارات البيانات (يمكن أن تحتوي الحزمة على إطارات متعددة).
الإطارات هي أصغر وحدة تحتوي على بيانات تحتاج إلى ترسخت على حزم نقطة النهاية أو البروتوكول اللازمة لإجراءات مثل المفاوضات المصافحة ومعالجة الأخطاء وغيرها.
بعد الشوكة وسحب سير عمل جيثب:
لمزيد من المعلومات ، اقرأ المساهمة
يمكن العثور على مسودة نقل QUIC ، كما ذكر سابقًا في Quic-Transport.
لاختبار QUIC والعثور على معلومات إضافية ، يمكنك زيارة اللعب باستخدام QUIC.
يمكن العثور على رمز المصدر C ++ الرسمي في Proto-Quic.