0x5c2aad80
Quicnet ist eine .NET -Implementierung des nachstehend erwähnten Quic -Protokolls. Die Implementierung stimmt im Einklang mit der 32. Version des Quic-Transport-Entwurfs und bietet noch keine Implementierung der folgenden verwandten Entwürfe an:
Minimale Arbeitsbeispiele
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 ist ein standardisiertes Transportschichtprotokoll, das mit RFC 9000 entspricht, das von Google entworfen wurde und die Datenübertragung von verbindungsorientierten Webanwendungen beschleunigen kann. Dieses Protokoll auf Anwendungsebene zielt darauf ab, von TCP zu UDP zu wechseln, indem verschiedene Techniken anhand verschiedener Techniken der TCP-Transfer ähneln und gleichzeitig die Verbindungshandshakes reduziert und vernünftige Multiplexing-Techniken auf eine Weise bereitstellt, so dass verschiedene Dateneinheiten während der Übertragung verschoben werden können.
Verbindungen sind die ersten logischen Kanäle, die eine Kommunikation zwischen zwei Endpunkten darstellen. Wenn eine Verbindung hergestellt wird, wird eine Verbindungs -ID zwischen den beiden Endpunkten ausgehandelt. Die Verbindungs-ID wird zur Identifizierung der Verbindung verwendet, auch wenn Änderungen in den unteren Protokollschichten auftreten, z. Dieser Mechanismus wird als Verbindungsmigration bezeichnet, wodurch der Neustart des Verhandlungsflusss und das Wiederverlegen von Daten verhindert wird.
Streams sind logische Kanäle der zweiten Stufe, die Datenströme darstellen. Eine einzelne Verbindung kann eine ausgehandelte Anzahl von Streams (zum Beispiel 8 Maximum) haben, die als Multiplex -Einheiten dienen. In jedem Stream verfügt er eine eigene, generierte Stream -ID, die zur Ermittlung der verschiedenen Datenobjekte verwendet wird. Streams werden geschlossen, wenn alle Daten gelesen werden oder die ausgehandelte maximale Datenübertragung erreicht wird.
Pakete sind die Datenübertragungseinheiten. Der Paketkopf enthält Informationen zur Verbindung, an die dieses Paket gesendet wird, und kryptografische Informationen. Nach dem Abzug der zusätzlichen Übertragungsinformationen sind die Datenrahmen übrig (ein Paket kann mehrere Rahmen haben).
Frames sind die kleinste Einheit, die entweder Daten enthalten, die auf die Endpunkt- oder Protokollpakete übertragen werden müssen, die für Aktionen wie Handshake -Verhandlungen, Fehlerbehandlung und andere erforderlich sind.
Befolgen Sie die Gabel und ziehen Sie Github Workflow:
Für weitere Informationen lesen Sie den Beitrag zum Mitnehmen
Der Quic-Transport-Entwurf kann wie zuvor bei Quic-Transsport erwähnt werden.
Um Quic zu testen und zusätzliche Informationen zu finden, können Sie das Spielen mit Quic besuchen.
Der offizielle C ++-Quellcode kann bei Proto-Quic gefunden werden.