Articles

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.

Przeglądarki obsługują WebSockets

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *