Używanie WebSockets z Node.js
Kamp 2021 JavaScript Full-Stack jest TERAZ OTWARTY DLA ZAPISÓW!
WebSockets są alternatywą dla komunikacji HTTP w aplikacjach internetowych.
Oferują one długo działający, dwukierunkowy kanał komunikacyjny pomiędzy klientem a serwerem.
Po ustanowieniu, kanał jest utrzymywany jako otwarty, oferując bardzo szybkie połączenie z niskim opóźnieniem i narzutem.
Wsparcie przeglądarek dla WebSockets
WebSockets są obsługiwane przez wszystkie nowoczesne przeglądarki.
Jak WebSockets różnią się od HTTP
HTTP to zupełnie inny protokół, a także inny sposób komunikacji.
HTTP to protokół żądanie/odpowiedź: serwer zwraca pewne dane, gdy klient ich zażąda.
W przypadku WebSockets:
- serwer może wysłać wiadomość do klienta bez jego wyraźnego żądania
- klient i serwer mogą rozmawiać ze sobą jednocześnie
- bardzo mało danych musi być wymienianych w celu wysłania wiadomości. Oznacza to niską latencję komunikacji.
WebSockets są świetne do komunikacji w czasie rzeczywistym i długotrwałej.
HTTP jest świetny do okazjonalnej wymiany danych i interakcji inicjowanych przez klienta.
HTTP jest znacznie prostszy w implementacji, podczas gdy WebSockets wymaga nieco więcej narzutu.
Zabezpieczone WebSockets
Zawsze używaj bezpiecznego, szyfrowanego protokołu dla WebSockets, wss://
.
ws://
odnosi się do niebezpiecznej wersji WebSockets (http://
WebSockets), i należy jej unikać z oczywistych powodów.
Utwórz nowe połączenie WebSockets
const url = 'wss://myserver.com/something'const connection = new WebSocket(url)
connection
jest obiektem WebSocket.
Gdy połączenie zostanie pomyślnie nawiązane, wystrzeliwane jest zdarzenie open
.
Odsłuchaj go, przypisując funkcję wywołania zwrotnego do właściwości onopen
obiektu connection
:
connection.onopen = () => { //...}
Jeśli wystąpi jakikolwiek błąd, odpalane jest wywołanie zwrotne funkcji onerror
:
connection.onerror = error => { console.log(`WebSocket error: ${error}`)}
Wysyłanie danych do serwera za pomocą WebSockets
Gdy połączenie jest już otwarte, można wysłać dane do serwera.
Możesz to zrobić w wygodny sposób wewnątrz funkcji onopen
callback:
connection.onopen = () => { connection.send('hey')}
Odbieranie danych z serwera za pomocą WebSockets
Osłuchaj za pomocą funkcji callback na onmessage
, która jest wywoływana po odebraniu zdarzenia message
:
connection.onmessage = e => { console.log(e.data)}
Implementacja serwera WebSockets w Node.js
ws to popularna biblioteka WebSockets dla Node.js.
Użyjemy jej do zbudowania serwera WebSockets. Może być również użyta do implementacji klienta i wykorzystania WebSockets do komunikacji pomiędzy dwoma usługami backendowymi.
Łatwo zainstalować go za pomocą
yarn inityarn add ws
Kodu, który trzeba napisać jest bardzo mało:
const WebSocket = require('ws')const wss = new WebSocket.Server({ port: 8080 })wss.on('connection', ws => { ws.on('message', message => { console.log(`Received message => ${message}`) }) ws.send('ho!')})
Kod ten tworzy nowy serwer na porcie 8080 (domyślny port dla WebSockets) i dodaje funkcję wywołania zwrotnego po nawiązaniu połączenia, wysyłającą ho!
do klienta i rejestrującą otrzymywane wiadomości.
Zobacz przykład na żywo na Glitch
Tutaj znajduje się przykład serwera WebSockets na żywo: https://glitch.com/edit/#!/flavio-websockets-server-example
Tutaj jest klient WebSockets, który wchodzi w interakcję z serwerem: https://glitch.com/edit/#!/flavio-websockets-client-example
Ściągnij mój darmowy podręcznik Node.js
Bootcamp 2021 JavaScript Full-Stack JEST TERAZ OTWARTY NA ZAPISY DO NEKTORU! Nie przegap tej okazji, zapisz się już DZISIAJ!
Więcej tutoriali node:
- Zależności Npm i devDependencies
- Jak używać Sequelize do interakcji z PostgreSQL
- Krótka historia Node.js
- Używanie WebSockets z Node.js
- Jak uzyskać zarówno parsowane ciało, jak i surowe ciało w Express
- Jak używać obietnic i await z funkcjami opartymi na wywołaniach zwrotnych
- Jak zainstalować Node.js
- Wprowadzenie do menedżera pakietów npm
- Interakcja z Google Analytics API przy użyciu Node.js