Datový kanál
Poznámka:
Tento dokument se ponoří do funkce datového kanálu, která se nachází v sadě SDK pro volání služeb Azure Communication Services. I když datový kanál v tomto kontextu má určité podobnosti s datovým kanálem v WebRTC, je důležité rozpoznat drobné rozdíly v jejich specifikách. V tomto dokumentu používáme termíny rozhraní API datového kanálu nebo rozhraní API k označení rozhraní API datového kanálu v rámci sady SDK. Při odkazování na rozhraní API datového kanálu ve WebRTC explicitně používáme termín WebRTC Data Channel API pro přehlednost a přesnost.
Rozhraní API datového kanálu umožňuje zasílání zpráv v reálném čase během hlasových hovorů a videohovorů. S tímto rozhraním API teď můžete snadno integrovat funkce výměny dat do aplikací a zajistit tak uživatelům bezproblémové komunikační prostředí. Mezi klíčové funkce patří:
- Zasílání zpráv v reálném čase: Rozhraní API datového kanálu umožňuje uživatelům okamžitě posílat a přijímat zprávy během probíhajícího hlasového hovoru nebo videohovoru a podporovat plynulou a efektivní komunikaci. Ve scénářích skupinového volání je možné zprávy odeslat jednomu účastníkovi, konkrétní sadě účastníků nebo všem účastníkům hovoru. Tato flexibilita zlepšuje komunikaci a spolupráci mezi uživateli během skupinových interakcí.
- Jednosměrná komunikace: Na rozdíl od obousměrné komunikace je rozhraní API datového kanálu určené pro jednosměrnou komunikaci. Používá jedinečné objekty pro odesílání a příjem zpráv: DataChannelSender objekt pro odesílání a DataChannelReceiver objekt pro příjem. Toto oddělení zjednodušuje správu zpráv ve voláních skupin, což vede k efektivnějšímu uživatelskému prostředí.
- Podpora binárních dat: Rozhraní API podporuje odesílání a příjem binárních dat, což umožňuje výměnu různých datových typů, jako je text, obrázky a soubory. Textové zprávy musí být serializovány do bajtové vyrovnávací paměti před jejich přenosem.
- Možnosti odesílatele: Rozhraní API datového kanálu poskytuje tři konfigurovatelné možnosti při vytváření objektu odesílatele, včetně spolehlivosti, priority a přenosové rychlosti. Tyto možnosti umožňují konfiguraci kanálu tak, aby vyhovovala konkrétním potřebám pro různé případy použití.
- Zabezpečení: Všechny zprávy vyměňované mezi klientem a druhým koncovým bodem jsou šifrované a zajišťují ochranu osobních údajů a zabezpečení dat uživatelů.
Běžné případy použití
Datový kanál je možné použít v mnoha různých scénářích. Mezi dva běžné příklady použití patří:
Zasílání zpráv mezi účastníky hovoru
Rozhraní API datového kanálu umožňuje přenos binárních zpráv typu mezi účastníky volání. S odpovídající serializací v aplikaci může dodávat různé typy zpráv pro různé účely. K dispozici jsou také další knihovny nebo služby poskytující funkce zasílání zpráv. Každý z nich má své výhody a nevýhody. Měli byste zvolit vhodný pro váš scénář použití. Rozhraní API datového kanálu například nabízí výhodu komunikace s nízkou latencí a zjednodušuje správu uživatelů, protože není potřeba udržovat samostatný seznam účastníků. Funkce datového kanálu ale neposkytuje trvalost zpráv a nezaručuje, že zpráva nebude ztracena koncovým způsobem. Pokud potřebujete stavové zasílání zpráv nebo zaručené doručení, možná budete chtít zvážit alternativní řešení.
Sdílení souborů
Sdílení souborů představuje další běžné případy použití rozhraní API datového kanálu. Ve scénáři volání mezi dvěma účastníky funguje připojení datového kanálu na základě peer-to-peer. Toto nastavení nabízí efektivní metodu pro přenos souborů, která plně využívá přímé připojení peer-to-peer, aby se zlepšila rychlost a snížila latence.
Ve scénáři skupinového volání se soubory stále dají sdílet mezi účastníky. Existují ale lepší způsoby, jako je Azure Storage nebo Azure Files. Kromě toho můžete vysíláním obsahu souboru všem účastníkům hovoru dosáhnout nastavením prázdného seznamu účastníků. Je však důležité mít na paměti, že kromě omezení šířky pásma platí další omezení při volání skupiny při vysílání zpráv, jako je rychlost paketů a zpětný tlak z přenosové rychlosti příjmu.
Klíčové koncepty
Jednosměrná komunikace
Rozhraní API datového kanálu je navržené pro jednosměrnou komunikaci, nikoli obousměrnou komunikaci v datovém kanálu WebRTC. Používá samostatné objekty pro odesílání a přijímání zpráv, s DataChannelSender objekt zodpovědný za odesílání zpráv a DataChannelReceiver objekt pro příjem zpráv.
Oddělení objektů odesílatele a příjemce zjednodušuje zpracování zpráv ve scénářích skupinového volání a poskytuje jednodušší a uživatelsky přívětivější prostředí.
Kanál
Každá zpráva datového kanálu je přidružená ke konkrétnímu kanálu určenému uživatelem channelId
. Je důležité objasnit, že toto ID kanálu nesouvisí s id
vlastností v datovém kanálu WebRTC. Tento channelId lze využít k rozlišení různých použití aplikace, jako je například použití 1000 pro řídicí zprávy a 1001 pro přenosy obrázků.
Id kanálu je přiřazeno při vytváření objektu DataChannelSender a může být zadán uživatelem nebo určeno sadou SDK, pokud není zadáno.
Platný rozsah id kanálu leží mezi 1 a 65535. Pokud je k dispozici id kanálu 0 nebo pokud není k dispozici id kanálu, sada SDK přiřadí dostupné ID kanálu z platného rozsahu.
Spolehlivost
Při vytváření lze kanál nakonfigurovat tak, aby byl jedním ze dvou možností spolehlivosti: lossy
nebo durable
.
lossy
Kanál znamená, že pořadí zpráv není zaručeno a při selhání odesílání může být zpráva bezobslužná. Obvykle si poskytuje rychlejší rychlost přenosu dat.
Kanál durable
znamená, že sada SDK zaručuje bezeztrátové a seřazené doručování zpráv. V případech, kdy zprávu nejde doručit, sada SDK vyvolá výjimku. Ve webové sadě SDK je odolnost kanálu zajištěna prostřednictvím spolehlivého připojení SCTP. Neznamená to ale, že by se zpráva neztratila koncovým způsobem. V kontextu skupinového volání označuje prevenci ztráty zpráv mezi odesílatelem a serverem. Při volání peer-to-peer označuje spolehlivý přenos mezi odesílatelem a vzdáleným koncovým bodem.
Poznámka:
V aktuální implementaci webové sady SDK se přenos dat provádí prostřednictvím spolehlivého připojení datového kanálu WebRTC pro oba lossy
kanály i durable
kanály.
Priorita
Při vytváření lze kanál nakonfigurovat tak, aby byl jedním ze dvou možností priority: normal
nebo high
.
U webové sady SDK se nastavení priority porovnává pouze mezi kanály na straně odesílatele. Kanály s high
prioritou mají vyšší prioritu pro přenos v porovnání s kanály s normal
prioritou.
Datový tok
Při vytváření kanálu lze pro přidělení šířky pásma zadat žádoucí přenosovou rychlost.
Tato vlastnost přenosové rychlosti informuje sadu SDK o očekávaném požadavku na šířku pásma pro konkrétní případ použití. I když sada SDK obecně nemůže přesně odpovídat přenosové rychlosti, pokusí se požadavek pojmout.
Relace
Rozhraní API datového kanálu představuje koncept relace, která dodržuje sémantiku otevřeného uzavření. V sadě SDK je relace přidružená k odesílateli nebo objektu příjemce.
Při vytváření objektu odesílatele s novým id kanálu je objekt odesílatele v otevřeném stavu. Pokud je close()
rozhraní API vyvoláno na objektu odesílatele, relace se zavře a přestane usnadnit odesílání zpráv. Zároveň objekt odesílatele upozorní všechny účastníky hovoru, že relace je uzavřena.
Pokud se vytvoří objekt odesílatele s již existujícím id kanálu, existující objekt odesílatele přidružený k id kanálu se zavře a všechny zprávy odeslané z nově vytvořeného objektu odesílatele se rozpoznají jako součást nové relace.
Z pohledu příjemce jsou zprávy přicházející z různých relací na straně odesílatele směrovány na odlišné objekty příjemce. Pokud sada SDK identifikuje novou relaci přidruženou k existujícímu id kanálu na straně příjemce, vytvoří nový objekt příjemce. Sada SDK nezavírá starší objekt příjemce; takové uzavření proběhne 1) když objekt příjemce obdrží oznámení o uzavření od odesílatele, nebo 2) pokud relace nepřijala žádné zprávy od odesílatele po dobu více než dvě minuty.
V případech, kdy je relace objektu příjemce uzavřena a na straně příjemce neexistuje žádná nová relace pro stejné ID kanálu, sada SDK vytvoří nový objekt příjemce po přijetí zprávy ze stejné relace později. Pokud však na straně příjemce existuje nová relace pro stejné ID kanálu, sada SDK zahodí všechny příchozí zprávy z předchozí relace.
Vzhledem k tomu, že objekt příjemce se zavře, pokud nepřijímá zprávy po dobu delší než dvě minuty, doporučujeme, aby aplikace pravidelně odesílala zprávy o zachování stavu aktivního objektu příjemce ze strany odesílatele.
Pořadové číslo
Pořadové číslo je 32bitové celé číslo bez znaménka zahrnuté ve zprávě datového kanálu, které označuje pořadí zpráv v rámci kanálu. Je důležité si uvědomit, že toto číslo se generuje z pohledu odesílatele. Příjemce si proto může všimnout mezery v pořadových číslech, pokud odesílatel změní příjemce během odesílání zpráv.
Představte si například scénář, ve kterém odesílatel odesílá tři zprávy. Zpočátku jsou příjemci Účastník A a Účastník B. Po první zprávě změní odesílatel příjemce na účastníka B a před třetí zprávou se příjemce přepne na účastníka A. V tomto případě účastník A obdrží dvě zprávy s pořadovými čísly 1 a 3. To ale neznamená ztrátu zprávy, ale odráží pouze změnu příjemců odesílatelem.
Omezení
Velikost zprávy
Maximální povolená velikost jedné zprávy je 32 kB. Pokud potřebujete odesílat data větší než limit, budete je muset rozdělit do více zpráv.
Seznam účastníků
Maximální počet účastníků v seznamu je omezen na 64. Pokud chcete zadat více účastníků, budete muset seznam účastníků spravovat sami. Pokud například chcete poslat zprávu 50 účastníkům, můžete vytvořit dva různé kanály, každý s 25 účastníky v jejich seznamech příjemců. Při výpočtu limitu se jako samostatné entity počítají dva koncové body se stejným identifikátorem účastníka. Jako alternativu můžete zvolit vysílání zpráv. Určitá omezení se však vztahují při vysílání zpráv.
Omezování rychlosti
V současné době je implementovaná sada SDK pro volání, která uživatelům brání v odesílání dat s vyšší rychlostí, i když to jejich síť umožňuje. Aktuální maximální rychlost šířky pásma pro datový kanál jsou:
- Spolehlivý kanál (Durable): 64 kB/s
- Nespolehlivý kanál (Ztráta): 512 kB/s
- Vysoce prioritní nespolehlivý kanál: 200 kb/s
Při vysílání zpráv je však limit přenosové rychlosti odesílání dynamický a závisí na přenosové rychlosti příjmu. V aktuální implementaci se limit přenosové rychlosti odesílání vypočítá jako maximální přenosová rychlost odesílání minus 80 % přenosové rychlosti příjmu.
Kromě toho také při odesílání zpráv všesměrového vysílání vynucujeme omezení rychlosti paketů. Aktuální limit je nastaven na 80 paketů za sekundu, kde každých 1200 bajtů ve zprávě se počítá jako jeden paket. Tato opatření jsou na místě, aby se zabránilo záplavám, když velký počet účastníků skupinového hovoru vysílá zprávy.
Další kroky
Další informace najdete v následujících článcích:
- Informace o rychlém startu – Přidání datového kanálu do volající aplikace
- Další informace o možnostech volání sady SDK