0x5c2aad80
Quicnet - это реализация .NET протокола QUIC, упомянутого ниже. Реализация остается в соответствии с 32-й версией проекта QUIC-Transport и еще не предлагает реализацию следующих связанных проектов:
Минимальные рабочие примеры
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), которые служат мультиплексирующими объектами. Каждый поток имеет свой собственный, сгенерированный идентификатор потока, используемый для идентификации различных передаваемых объектов данных. Потоки закрыты при чтении всех данных, или достигается согласованная максимальная передача данных.
Пакеты являются единицами передачи данных. Заголовок пакета содержит информацию о соединении, в которое отправляется этот пакет, и криптографическую информацию. После снятия дополнительной информации о передаче, остаются рамки данных (пакет может иметь несколько кадров).
Кадры - это наименьшая единица, которая содержит либо данные, которые должны быть трепещенными к пакетам конечной точки или протоколам, необходимым для таких действий, как переговоры рукопожатия, обработка ошибок и другие.
Следуя за вилкой и натяните рабочий процесс GitHub:
Для получения дополнительной информации прочитайте вклад
Проект Quic-Transport можно найти, как упоминалось ранее в Quic-Transport.
Чтобы проверить QUIC и найти дополнительную информацию, вы можете посетить игру с Quic.
Официальный исходный код C ++ можно найти в Proto-Quic.