Quic基本上已經成了下一代互聯網基礎傳輸協議的既定標准了,雖然quic的標准還沒有完全定稿,但微軟已經推出了跨平台的ms-quic實現了,在.net 7中會內置對MS Quic的封裝,不過由於.net 7得到2022年的11月份發布,需要等上不少時間。昨天發現github上有人將.net 7中System.Net.Quic名字空間下部分實現給遷移到了.net 6下,便簡單的試了一下。
一、安裝Nuget包
首先我們需要安裝Nuget包,需要安裝如下Nuget包:Quic.NET
由於System.Net.Quic是的MSQuic的封裝,第二個包就是MsQuic的原生實現,win11已經內置了可以不安裝。對於linux,則需要安裝libmsquic。
二、簽發證書
Quic是強制需要TLS的,因此需要簽發證書,這里就不詳述。
三、服務端代碼
var listener = new QuicListener(QuicImplementationProviders.MsQuic, endPoint, new SslServerAuthenticationOptions()
{
ApplicationProtocols = new List<SslApplicationProtocol>() { new("quictest") },
ServerCertificate = new X509Certificate(@"e:/certificate.pfx", "123456"),
});
var quicConnection = await listener.AcceptConnectionAsync();
var quicStream = await quicConnection.AcceptStreamAsync();
Console.WriteLine("connected");
四、客戶端代碼
var conn = new QuicConnection(endPoint, new SslClientAuthenticationOptions()
{
ApplicationProtocols = new List<SslApplicationProtocol>() { new("quictest") },
});
await conn.ConnectAsync();
var stream = conn.OpenBidirectionalStream();
await stream.WriteAsync(Encoding.UTF8.GetBytes("hello world"));
最后,這里記錄下如何安裝libmsquic。官方的說明文檔如下,
-
添加 packages.microsoft.com 存儲庫。 有關說明請參閱 Microsoft 產品的 Linux 軟件存儲庫。
-
使用發行版的包管理器安裝 libmsquic 包。
以Ubuntu為例,其主要就如下四句命令:
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo apt-add-repository https://packages.microsoft.com/ubuntu/20.04/prod
sudo apt-get update
apt install libmsquic
參考文章