Nasıl yani?
RTCQuicTransport, yeni bir web platformudur QUIC kullanarak uzaktaki eşlerle rastgele veri alışverişine izin veren API protokolü. Eşler arası kullanım alanlarına yönelik olduğundan Bağımsız bir RTCIceTransport üzerinden eşler arası bağlantı kurulmasını sağlayan API ICE Veriler güvenilir ve sıralı bir şekilde aktarılır (aşağıdaki bölüme bakın) sipariş edilmemiş ve güvenilir olmayan teslimat) olabilir. Genel olduğundan, Oyunlar, dosya aktarımları, medya aktarımı, mesajlaşma vb.
Neden?
Güçlü bir alt düzey veri taşıma API'si, uygulamaları (ör. gerçek zamanlı iletişim) internette yeni şeyler yapmak için kullanılır. API'yi temel alarak iş arkadaşlarınızla yapabileceklerinizin sınırlarını zorlayarak, kendi çözümlerinizi (ör. özel bit hızı ayırma düğmelerinin kilidinin açılması) kullanılabilir. İçinde Kodlanmış medyaya yönelik daha fazla destek, işletmenizle kurduğunuz etkileşimin kontrol olanağı sunan bir görüntülü iletişim uygulamasıdır. WebRTC’nin NV çabası daha alt düzey API'lere geçmektir. Bu şekilde erkenden denemeler yapmak da değerlidir.
Neden QUIC?
Gerçek zamanlı iletişimler için QUIC protokolü tercih edilir. Bu özellik,
UDP'nin UDP'nin üzerinde olduğundan, yerleşik şifreleme, tıkanıklık kontrolü vardır ve
başkan yardımcısı olun. RTCQuicTransport
, ile çok benzer yetenekler sunar.
RTCDataChannel
API'sını; ancak taşıma olarak SCTP yerine QUIC'yi kullanır
protokolü. RTCQuicTransport
bağımsız bir API olduğundan,
gerçek zamanlı medya içeriklerini içeren RTCPeerConnection
API'sinin ek yükünü
yığını.
Nasıl mı?
Genel API'ye genel bakış
API'de 3 ana özetleme bulunur: RTCIceTransport
, RTCQuicTransport
ve RTCQuicStream
.
RTCIceTransport
ICE, internet üzerinden eşler arası bağlantılar kuran bir protokoldür.
günümüzde WebRTC'de kullanılmaktadır. Bu nesne, reklam öğelerini temel alan
ICE bağlantısı olabilir. QUIC bağlantısı için paket aktarımı olarak kullanılır.
RTCQuicTransport
, bunu oluşturucusunda alır.
RTCQuicTransport
QUIC bağlantısını temsil eder. QUIC bağlantısı kurmak ve QUIC akışları oluşturabilirsiniz. Ayrıca QUIC bağlantısıyla ilgili istatistikleri de gösterir seviyesinde olmalıdır.
RTCQuicStream
Uzak tarafta veri okumak ve yazmak için kullanılır. Akışları taşıma
emin olmanız gerekir. Aynı kaynaktan birden fazla akış oluşturulabilir
RTCQuicTransport
ve veriler bir akışa yazıldığında bir
uzaktan toplu taşımada “onquicstream” etkinliği. Akışlar,
aynı QUIC bağlantısındaki farklı verileri ayırt edebilirsiniz. Yaygın örnekler
ayrı akışlar genelinde ayrı dosyalar,
veya ayrı akışlardaki farklı medya türlerini
görmenizi sağlar.
RTCQuicStream
'ler hafiftir, bir QUIC bağlantısı üzerinden çoğulanır ve
diğer RTCQuicStream
'lerin başında engel olmamasına neden olmaz.
Bağlantı Kurulumu
Aşağıda, eşler arası QUIC bağlantısı oluşturmaya yönelik bir örnek verilmiştir.
RTCPeerConnection
gibi, RTCQuicTransport
API de bir
bağlantı parametrelerini müzakere etmek için güvenli sinyal kanalı,
dahil olmak üzere mevcut tüm koruma özelliklerinden yararlanabilirsiniz. RTCIceTransport
, ICE ile anlaşma yapıyor
parametrelerini (ufrag ve şifre) ve RTCIceCandidate
'ları içerir.
Müşterinin bakış açısı:
const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
iceParams: iceTransport.getLocalParameters(),
quicKey: quicTransport.getKey(),
});
iceTransport.onicecandidate = e => {
if (e.candidate) {
signalingChannel.send({candidate: e.candidate});
}
};
// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, candidate}) => {
if (iceParams) {
iceTransport.start(iceParams);
quicTransport.connect();
} else if (candidate) {
iceTransport.addRemoteCandidate(candidate);
}
};
Sunucunun bakış açısı:
const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
iceParams: iceTransport.getLocalParameters(),
});
iceTransport.onicecandidate = e => {
if (e.candidate) {
signalingChannel.send({candidate: e.candidate});
}
};
// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, quicKey, candidate}) => {
if (iceParams && quicKey) {
iceTransport.start(iceParams);
quicTransport.listen(quicKey);
} else if (candidate) {
iceTransport.addRemoteCandidate(candidate);
}
};
Veri Aktarımı
Veri aktarımı, okuma ve görüntüleme için RTCQuicStream API'leri kullanılarak yazılıyor:
RTCQuicStreamReadResult readInto(Uint8Array data);
void write(RTCQuicStreamWriteParameters data);
Promise<void> waitForWriteBufferedAmountBelow(unsigned long amount);
Promise<void> waitForReadable(unsigned long amount);
Arabelleğe alınıyor
waitFor*
yöntemlerinin döndürdüğü taahhütler, aşağıdaki durumlarda verilerin arabelleğe alınmasına izin verir.
JavaScript meşgul.
okuma arabelleği alıcı tarafında dolar. Gönderen tarafta yazma var.
arka basınç uygulandığında doldurulabilecek tamponları
yazma tarafında da bir waitForWriteBufferedAmountBelow
yöntemi bulunur.
yazması için arabellekte yer açılmasına izin verir. Daha fazla bilgi için:
Geliştiricinin diğer bölümlerinden de yazma/okuma verilerini bulabilirsiniz
belgeleri inceleyin.
Siparişsiz/Güvenilir Olmayan Teslimat
RTCQuicStream
yalnızca verilerin güvenilir ve sıralı şekilde gönderilmesini destekler.
güvenilmez/sırasız teslimat başka yollardan da yapılabilir. Örneğin,
sırasız teslimat, ayrı akışlara küçük parçalar halinde veri gönderilebilir
çünkü veriler akışlar arasında sıralanmaz. Güvenilir olmayan teslimat için
bitiş doğru değerine ayarlanmış küçük veri parçaları gönderebilir ve ardından
Zaman aşımı süresinin sonunda akışta reset()
. Zaman aşımı
verileri kaybetmeden önce kaç tane yeniden iletimin yapılması gerektiği.
Ne zaman?
Kaynak denemesi Chrome 73 sürümünde başlayacak ve kullanıma sunulacaktır ve M75 sürümü dahil. Bundan sonra kaynak denemesi dokunun. Geri bildirim ve ilgi doğrultusunda gerekli değişiklikleri yapacağız API'yi göndermeli, bu API'nin yeni kaynak denemesini uygulamalı veya API'ye son vermeli.
Nerede?
Chrome Tarayıcı, iOS hariç tüm platformlarda kullanılabilir.
Başka bir konu var mı?
Geri bildirim
Kaynak denemesinin ana hedeflerinden biri sizden geri bildirim almaktır. geliştiricilerden bahsedeceğiz. İlgi alanları:
- Bu API sizin için ne sağlıyor?
- Bu API, diğer veri taşıma API'lerini nasıl iyileştiriyor?
(
WebSocket
veya WebRTC'ninRTCDataChannel
)? Bunu nasıl iyileştirebilir? - Performans
- API ergonomisi
Kaynak deneme sürümüne kaydolun
- Kaynağınız için jeton isteyin.
- Jetonu sayfalarınıza ekleyin. Bu jetonu
kaynağınızdaki sayfalar:
- Herhangi bir sayfanın başına
origin-trial
<meta>
etiketi ekleyin. Örneğin, aşağıdaki gibi görünebilir:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
. - Sunucunuzu yapılandırabiliyorsanız jetonu sayfalarda da sağlayabilirsiniz
veya
Origin-Trial
HTTP üstbilgisi kullanarak. Sonuçta ortaya çıkan yanıt başlığı, şuna benzer:Origin-Trial: TOKEN_GOES_HERE
- Herhangi bir sayfanın başına
Web Spesifikasyonu
Taslak spesifikasyon, kaynak denemesinde API'nin ilerisine taşındı şunları içerir:
- WHEREWG akışlarıyla daha yakından uyumlu olan tek yönlü akışlar
- Yeniden iletimleri devre dışı bırakma
- (Çok yakında) veri birimleri
Teknik özelliklerin tamamını ve daha fazlasını ( NEWG akış desteği) ile ilgili daha fazla bilgi edinin.
Güvenlik
QUIC el sıkışmasında güvenlik sağlamak için, önceden paylaşılan bir anahtar kullanılarak Şifrelenmiş bir P2P QUIC bağlantısı oluşturmalıdır. Bu anahtarın gizlilik ve bütünlük garantileriyle bant dışı, güvenli bir kanaldır. Anahtarın JavaScript'e açık olacağını unutmayın.
Aktif Saldırı
Yalnızca sertifikanın sinyalini göndermek için bütünlük gerektiren DTLS-SRTP'den farklı olarak Dijital parmak izi, önceden paylaşılan anahtarın sinyalini vermek için bütünlük gerektirir. . PSK'nın güvenliği ihlal edilmişse (ör. sinyaldeki sunucu tarafından anlaşırsa aktif bir saldırgan, ortadaki adam saldırısına neden olabilir olması gerekir.
Mevcut durum
Step | Durum |
---|---|
1. Açıklayıcı oluşturun | Tamamlandı |
**2a. RTCQuicTransport Spesifikasyonu ** | **Devam Ediyor** |
**2b. RTCIceTransport Spesifikasyonu ** | **Devam Ediyor** |
**3. Geri bildirim toplama tasarımı tekrarlayın** | **Devam Ediyor** |
4. Kaynak denemesi | Chrome 73'te başlıyor! |
5. Başlat | Başlatılmadı |
Yararlı Bağlantılar
- Diğer belgeler
- Herkese açık açıklayıcı
- Hata izleme
- Kaynak deneme jetonu isteyin
- Kaynak deneme jetonu nasıl kullanılır?
- RTCQuicTransport sorunlarıyla ilgili tartışma
- RTCIceTransport sorunlarıyla ilgili tartışma