Alternativní komunikace

DVOP3 WBB

Bc. Matěj Cajthaml ©

Smíchovská střední průmyslová
škola a gymnázium

icon

Obousměrná komunikace

Komunikace v HTTP je obvykle jednosměrná — na požadavek server odpoví klientovi.

Obousměrná komunikace

  • co to vlastně znamená?
  • server nám odesílá data bez žádosti
  • ideální je real-time komunikace
  • na co by se to mohlo hodit?

Obousměrná komunikace

Práce

Vymyslíme, jak by šla udělat obousměrná komunikace za pomoci HTTP.

Polling

  • klient pravidelně posílá požadavky na server
  • server odpovídá hned po obdržení požadavku
  • frekvence? dle zátěže a potřeby

Polling

                    sequenceDiagram
                        participant Klient
                        participant Server
                        loop každých x sekund
                            Klient->>Server: Požadavek
                            activate Server
                            Server->>Klient: Odpověď
                            deactivate Server
                        end
               

Polling

Výhody

  • snadná implementace
  • podpora všech prohlížečů
  • na serveru není nutné nic moc měnit

Nevýhody

  • zbytečné zatížení serveru, sítě a klienta
  • neefektivní
  • není to real-time

Implementace pollingu

Práce

Implementujme polling v nějakém jazyku a backend frameworku.

Long polling

  • podobné pollingu
  • server neodpovídá hned, ale až když má data
  • nebo tzv. timeout (většinou 30s)
  • klient neposílá požadavky dokud nedostane odpověď / timeout

Long polling

                    sequenceDiagram
                        participant Klient
                        participant Server
                        loop každých x sekund
                            Klient->>Server: Požadavek
                            activate Server
                            Server-->Server: Čekání na data
                            alt když požadavek existuje moc dlouho
                                Server->>Klient: Odpověď o timeoutu
                            else
                                Server->>Klient: Odpověď s daty
                            end
                            deactivate Server
                        end
               

Long polling

Výhody

  • podpora všech prohlížečů
  • menší zátěž serveru a sítě
  • složitější implementace na serveru

Nevýhody

  • stále to není real-time
  • timeout může být problém, prohlížeč může zavřít spojení
  • stále je server zatížen

Implementace long pollingu

Práce

Implementujme long polling v nějakém jazyku a backend frameworku.

Server-sent events

  • nutná podpora na serveru i v prohlížeči
  • neustále propojení, server může posílat data
  • zabudovaný systém zpětného připojení
  • každá zpráva ma identifikátor

Server-sent events

  • nutné nastavit hlavičky:
    • Content-Type: text/event-stream
    • Cache-Control: no-cache
    • Connection: keep-alive
  • (a CORS)
  • data se posílají do daného připojení ve formatu data: data\n\n

Server-sent events

                    sequenceDiagram
                        participant Klient
                        participant Server
                        Klient->>Server: Požadavek
                        activate Server
                        Server-->Server: Čekání na data
                        Server->>Klient: Odpověď s daty
                        Server->>Klient: Odpověď s daty
                        Server-->Server: Čekání na data
                        Server->>Klient: Odpověď s daty
                        Server->>Klient: Odpověď s daty
                        deactivate Server
               

Server-sent event

Výhody

  • real-time komunikace
  • spousta podpory, např. znovupřipojení

Nevýhody

  • nutná podpora na serveru i v prohlížeči
  • dost zbytečností okolo

Implementace server-sent events

Práce

Implementujme server-sent events v nějakém jazyku a backend frameworku.

Websockets

Websockets

  • podobné server-sent events
  • komunikace je obousměrná
  • přímé propojení mezi klientem a serverem
  • vlastní protokol
  • závislý na HTTP pro handshake
  • určený jak na textové tak i binární data

Websockets

  • více určen pro real-time komunikaci
  • v základu nemá moc funkcionalit
  • existuje zabepečená verze protokolu (wss)
  • existují knihovny, které řeši místnosti, opakovatelné připojení, atd.

Klient

  • je nutné, aby to klient podporoval
  • v základu nemá žádný fallback
  • nějaké knihovny přecházejí při neexistující podpoře na polling
  • jiný protokol == musí běžet na jiném portu (horší nastavení)

Websockets

Práce

Najdeme knihovnu pro websockets v nějakém jazyku a backend frameworku a implementujme server, který ji bude používat.

gRPC

gRPC

  • protokol pro vzdálené volání procedur
  • definujeme služby, metody a data, které se předávají
  • velký opak RESTu
  • data v protobuf
  • dovoluje streamování, oboustrané

Definice

  • definujeme v souboru .proto
  • definujeme vše možné, možné více souborů
  • pomocí protoc compileru vytvoříme kód pro jazyk
  • výsledný kód obsahuje třídy, které budeme implementovat

Používání

  • klient volá metody dle definice (musí je znát)
  • data se automaticky serializují a deserializují

Kdo s gRPC

Práce

Zjistěte, jaké služby používají gRPC.

gRPC

Práce

Implementujeme nějakou službu za pomoci gRPC v nějakém jazyku a backend frameworku.

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/