0x5c2aad80
Quicnet คือการใช้งาน. NET ของโปรโตคอล QUIC ที่กล่าวถึงด้านล่าง การใช้งานยังคงสอดคล้องกับร่าง Quic-Transport เวอร์ชัน 32 และยังไม่ได้เสนอการดำเนินการตามร่างที่เกี่ยวข้องต่อไปนี้:
ตัวอย่างการทำงานน้อยที่สุด
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 ในขณะที่ลดการเชื่อมต่อการเชื่อมต่อการเชื่อมต่อเช่นเดียวกับการจัดหาเทคนิคมัลติเพล็กซ์ที่สมเหตุสมผลในลักษณะที่เอนทิตีข้อมูลที่แตกต่างกัน
การเชื่อมต่อเป็นช่องทางตรรกะระดับแรกที่แสดงถึงการสื่อสารระหว่างจุดสิ้นสุดสองจุด เมื่อมีการสร้างการเชื่อมต่อ ID การเชื่อมต่อจะถูกเจรจาระหว่างจุดสิ้นสุดสองจุด ID การเชื่อมต่อใช้สำหรับการระบุการเชื่อมต่อแม้ว่าการเปลี่ยนแปลงจะเกิดขึ้นในชั้นโปรโตคอลที่ต่ำกว่าเช่นการเปลี่ยนโทรศัพท์ Wi-Fi หรือเปลี่ยนจาก Wi-Fi เป็นข้อมูลมือถือ กลไกนี้เรียกว่าการโยกย้ายการเชื่อมต่อซึ่งป้องกันการรีสตาร์ทกระแสเจรจาและข้อมูลใหม่
สตรีมเป็นช่องทางตรรกะระดับสองที่แสดงถึงสตรีมของข้อมูล การเชื่อมต่อเดียวสามารถมีจำนวนสตรีมที่เจรจาต่อรอง (ตัวอย่างสูงสุด 8 ตัวอย่าง) ซึ่งทำหน้าที่เป็นเอนทิตีมัลติเพล็กซ์ สตรีมทุกแห่งมี ID สตรีมที่สร้างขึ้นเองใช้สำหรับระบุวัตถุข้อมูลที่แตกต่างกันที่ถูกถ่ายโอน สตรีมจะถูกปิดเมื่ออ่านข้อมูลทั้งหมดหรือถึงการถ่ายโอนข้อมูลสูงสุดที่เจรจาต่อรอง
แพ็คเก็ตคือหน่วยการถ่ายโอนข้อมูล ส่วนหัวแพ็คเก็ตมีข้อมูลเกี่ยวกับการเชื่อมต่อที่แพ็คเก็ตนี้ถูกส่งไปยังและข้อมูลการเข้ารหัส หลังจากถอดข้อมูลการถ่ายโอนเพิ่มเติมสิ่งที่เหลืออยู่คือเฟรมของข้อมูล (แพ็กเก็ตสามารถมีหลายเฟรม)
เฟรมเป็นหน่วยที่เล็กที่สุดที่มีข้อมูลที่จำเป็นต้องส่งผ่านไปยังจุดสิ้นสุดหรือแพ็คเก็ตโปรโตคอลที่จำเป็นสำหรับการดำเนินการเช่นการเจรจาต่อรองการจับมือการจัดการข้อผิดพลาดและอื่น ๆ
ตามส้อมและดึงเวิร์กโฟลว์ GitHub:
สำหรับข้อมูลเพิ่มเติมอ่านการสนับสนุน
ร่าง Quic-Transport สามารถพบได้ตามที่กล่าวไว้ก่อนหน้านี้ที่ Quic-Transport
ในการทดสอบ QUIC และค้นหาข้อมูลเพิ่มเติมคุณสามารถเยี่ยมชมการเล่นกับ QUIC
ซอร์สโค้ด C ++ อย่างเป็นทางการสามารถพบได้ที่ Proto-Quic