0x5C2AAD80
Quicnet은 아래에 언급 된 Quic 프로토콜의 .NET 구현입니다. 구현은 Quic-Transport Draft의 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은 연결 지향적 인 웹 응용 프로그램의 데이터 전송 속도를 높이기 위해 Google이 설계 한 RFC 9000을 준수하는 표준화 된 전송 계층 프로토콜입니다. 이 애플리케이션 수준 프로토콜은 연결 핸드 셰이크를 줄이면서 TCP 전송과 유사한 여러 기술을 사용하여 TCP에서 UDP로 전환하는 것을 목표로하고 연결 핸드 셰이크를 줄이고 전송 중에 다른 데이터 엔티티가 인터리브 할 수있는 방식으로 현명한 멀티플렉싱 기술을 제공하는 것을 목표로합니다.
연결은 두 엔드 포인트 사이의 통신을 나타내는 첫 번째 계층 논리 채널입니다. 연결이 설정되면 두 엔드 포인트간에 연결 ID가 협상됩니다. 연결 ID는 전화 Wi-Fi 변경 또는 Wi-Fi에서 모바일 데이터로 전환하는 것과 같은 하위 프로토콜 계층에서 변경이 발생하더라도 연결을 식별하는 데 사용됩니다. 이 메커니즘을 연결 마이그레이션이라고하며 협상 흐름을 다시 시작하고 데이터를 다시 만드는 것을 방지합니다.
스트림은 데이터 스트림을 나타내는 두 번째 계층 논리 채널입니다. 단일 연결은 다중화 엔티티 역할을하는 협상 된 수의 스트림 (예 : 최대 8)을 가질 수 있습니다. 모든 스트림에는 전송중인 다른 데이터 객체를 식별하는 데 사용되는 자체, 생성 된 스트림 ID가 있습니다. 스트림은 모든 데이터를 읽거나 협상 된 최대 데이터 전송에 도달하면 닫힙니다.
패킷은 데이터 전송 장치입니다. 패킷 헤더에는이 패킷이 전송되는 연결에 대한 정보와 암호화 정보가 포함되어 있습니다. 추가 전송 정보를 제거한 후 남은 것은 데이터의 프레임입니다 (패킷에는 여러 프레임이있을 수 있음).
프레임은 핸드 셰이크 협상, 오류 처리 및 기타와 같은 조치에 필요한 엔드 포인트 또는 프로토콜 패킷으로 트라스퍼로 연결되어야하는 데이터를 포함하는 가장 작은 장치입니다.
포크와 Github 워크 플로우를 따라 :
자세한 내용은 기여를 읽으십시오
Quic-Transport 초안은 Quic-Transport에서 앞서 언급 한 바와 같이 찾을 수 있습니다.
Quic을 테스트하고 추가 정보를 찾으려면 Quic과 함께 플레이를 방문 할 수 있습니다.
공식 C ++ 소스 코드는 Proto-Quic에서 찾을 수 있습니다.