Skip to content
Devstock Academy
  • O nas
  • Moduły Akademii
    • Moduł 1 – Podstawy programowania
    • Moduł 2 – React.js
    • Moduły 3-6
  • Blog
  • Kontakt
  • O nas
  • Moduły Akademii
    • Moduł 1 – Podstawy programowania
    • Moduł 2 – React.js
    • Moduły 3-6
  • Blog
  • Kontakt
Dołącz do społeczności
Devstock Academy Banner
Programowanie i Technologie Webowe

WebSockets w JavaScript i Node.js – komunikacja w czasie rzeczywistym

  • 14 paź, 2024
  • Komentarze 0
websocket js node js websocket

W dzisiejszym świecie aplikacji internetowych komunikacja w czasie rzeczywistym stała się nieodłącznym elementem interaktywnych usług online. WebSocket JS to technologia, która umożliwia dwukierunkową komunikację między klientem a serwerem, co pozwala na tworzenie dynamicznych i responsywnych aplikacji. W tym artykule wyjaśnimy, czym są WebSockety i jak wykorzystać je w JavaScript i Node.js. Przedstawimy również krok po kroku, jak zbudować prostą aplikację chatową, demonstrując praktyczne zastosowanie tej technologii.

JavaScript – co to jest i jak zacząć naukę?

Czym są WebSockety?

WebSocket to protokół komunikacyjny, który umożliwia utrzymanie stałego połączenia między klientem a serwerem przez jedno gniazdo TCP. W przeciwieństwie do tradycyjnych połączeń HTTP, gdzie klient musi inicjować każde żądanie, WebSocket pozwala na dwukierunkową komunikację w czasie rzeczywistym. Dzięki temu zarówno klient, jak i serwer mogą wysyłać dane w dowolnym momencie, bez konieczności ciągłego nawiązywania nowych połączeń.

WebSocket API jest dostępne w większości nowoczesnych przeglądarek, co ułatwia integrację tej technologii w aplikacjach webowych.

Dokumentacja WebSocket API na MDN Web Docs

Jak działa protokół WebSocket?

Proces komunikacji z użyciem protokołu WebSocket rozpoczyna się od tzw. handshake WebSocket, który jest specjalnym żądaniem HTTP. Po ustanowieniu połączenia, komunikacja odbywa się za pomocą ramek WebSocket (WebSocket frames), które mogą zawierać dane w formacie tekstowym lub binarnym.

Stan połączenia WebSocket można monitorować za pomocą właściwości readyState, która informuje o aktualnym statusie połączenia.

Kurs programowania z gwarancją pracy - banner

Implementacja WebSocket w Node.js

Aby stworzyć serwer WebSocket w Node.js, możemy skorzystać z biblioteki ws, która jest lekką i wydajną implementacją serwera i klienta WebSocket.

Instalacja biblioteki ws

npm install ws

Tworzenie serwera WebSocket

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('Nowe połączenie WebSocket');

  ws.on('message', function incoming(message) {
    console.log('Otrzymano wiadomość: %s', message);
    // Odesłanie wiadomości do wszystkich klientów
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  ws.on('close', function close() {
    console.log('Połączenie WebSocket zamknięte');
  });

  ws.on('error', function error(error) {
    console.log('Błąd WebSocket:', error);
  });
});

W powyższym kodzie tworzymy WebSocketServer nasłuchujący na porcie 8080. Obsługujemy zdarzenia:

  • connection – nawiązanie nowego połączenia.

  • message – otrzymanie wiadomości od klienta.

  • close – zamknięcie połączenia.

  • error – wystąpienie błędu.

Implementacja klienta WebSocket w JavaScript

Po stronie klienta korzystamy z wbudowanego WebSocket API dostępnego w przeglądarce.

Tworzenie połączenia WebSocket

const socket = new WebSocket('ws://localhost:8080');

socket.onopen = function(event) {
  console.log('Połączenie WebSocket otwarte');
};

socket.onmessage = function(event) {
  console.log('Otrzymano wiadomość:', event.data);
  // Wyświetlenie wiadomości w interfejsie użytkownika
};

socket.onclose = function(event) {
  console.log('Połączenie WebSocket zamknięte');
};

socket.onerror = function(error) {
  console.log('Błąd WebSocket:', error);
};

// Wysłanie wiadomości
function wyslijWiadomosc(wiadomosc) {
  if (socket.readyState === WebSocket.OPEN) {
    socket.send(wiadomosc);
  }
}

Obsługujemy zdarzenia:

  • onopen – po otwarciu połączenia.

  • onmessage – po otrzymaniu wiadomości od serwera.

  • onclose – po zamknięciu połączenia.

  • onerror – w przypadku błędu.

Budowa aplikacji chatowej – krok po kroku

1. Przygotowanie środowiska

  • Upewnij się, że masz zainstalowane Node.js i npm.

  • Utwórz nowy folder projektu i zainicjuj go poleceniem npm init -y.

2. Instalacja zależności

Zainstaluj bibliotekę ws:

npm install ws

Oficjalna strona biblioteki ws na GitHubie

3. Tworzenie serwera WebSocket

Utwórz plik server.js i wklej kod serwera z poprzedniej sekcji.

4. Tworzenie klienta HTML

Utwórz plik index.html:

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <title>Chat WebSocket</title>
</head>
<body>
  <h1>Chat WebSocket</h1>
  <div id="wiadomosci"></div>
  <input type="text" id="wiadomoscInput" placeholder="Wpisz wiadomość">
  <button id="wyslijBtn">Wyślij</button>

  <script>
    const socket = new WebSocket('ws://localhost:8080');

    socket.onopen = function() {
      console.log('Połączenie WebSocket otwarte');
    };

    socket.onmessage = function(event) {
      const wiadomosciDiv = document.getElementById('wiadomosci');
      const nowaWiadomosc = document.createElement('p');
      nowaWiadomosc.textContent = event.data;
      wiadomosciDiv.appendChild(nowaWiadomosc);
    };

    socket.onclose = function() {
      console.log('Połączenie WebSocket zamknięte');
    };

    socket.onerror = function(error) {
      console.log('Błąd WebSocket:', error);
    };

    const wyslijBtn = document.getElementById('wyslijBtn');
    wyslijBtn.addEventListener('click', function() {
      const wiadomoscInput = document.getElementById('wiadomoscInput');
      const wiadomosc = wiadomoscInput.value;
      if (wiadomosc) {
        socket.send(wiadomosc);
        wiadomoscInput.value = '';
      }
    });
  </script>
</body>
</html>

5. Uruchomienie serwera HTTP

Aby serwować plik HTML, możemy użyć prostego serwera HTTP. Zainstalujmy pakiet http-server:

npm install -g http-server

Uruchom serwer w katalogu projektu:

http-server
Zrzut ekranu przedstawiający działającą aplikację chatową. websocket js node js websocket
Zrzut ekranu przedstawiający działającą aplikację chatową.

6. Testowanie aplikacji

  • Uruchom server.js poleceniem node server.js.

  • Otwórz przeglądarkę i przejdź do adresu http://localhost:8080.

  • Otwórz drugą kartę lub przeglądarkę i połącz się do tej samej strony.

  • Wpisz wiadomość i obserwuj, jak jest przesyłana między klientami w czasie rzeczywistym.

Zaawansowane funkcje WebSocket

Obsługa binarnego typu danych

WebSocket pozwala na przesyłanie danych binarnych. Można ustawić właściwość binaryType na 'arraybuffer' lub 'blob'.

socket.binaryType = 'arraybuffer';

Monitorowanie stanu połączenia

Właściwość readyState informuje o aktualnym stanie połączenia:

  • 0 – CONNECTING

  • 1 – OPEN

  • 2 – CLOSING

  • 3 – CLOSED

if (socket.readyState === WebSocket.OPEN) {
  // Połączenie jest otwarte
}

Użycie subprotokołów WebSocket

Subprotokoły WebSocket pozwalają na rozszerzenie funkcjonalności protokołu. Można je określić podczas tworzenia połączenia.

const socket = new WebSocket('ws://localhost:8080', 'chat-protocol');

Bezpieczeństwo i optymalizacja

Bezpieczne połączenia WebSocket

Używaj protokołu wss:// zamiast ws:// do nawiązywania bezpiecznych połączeń przez TLS/SSL.

const socket = new WebSocket('wss://secure.example.com');

Obsługa błędów i zamykanie połączeń

Obsługuj zdarzenia onerror i onclose, aby zapewnić stabilność aplikacji.

socket.onclose = function(event) {
  console.log('Kod zamknięcia:', event.code);
  console.log('Powód zamknięcia:', event.reason);
};

Utrzymywanie połączenia (Keep-alive)

Aby utrzymać połączenie, można wysyłać regularne wiadomości typu ping/pong.

Alternatywy dla WebSocket

Chociaż WebSocket jest potężnym narzędziem, istnieją również inne technologie umożliwiające komunikację w czasie rzeczywistym, takie jak:

  • Server-Sent Events (SSE)

  • Long Polling

  • WebRTC

Podsumowanie

WebSocket w JavaScript i Node.js to potężne narzędzie umożliwiające tworzenie aplikacji komunikujących się w czasie rzeczywistym. Dzięki prostocie implementacji i wsparciu w nowoczesnych przeglądarkach, WebSocket staje się standardem w budowaniu interaktywnych aplikacji webowych. Mamy nadzieję, że ten artykuł pomógł Ci zrozumieć podstawy i zachęcił do eksperymentowania z własnymi projektami.

Diagram ilustrujący przepływ danych między klientem a serwerem przy użyciu WebSocket - node js websocket websocket js

Zapraszamy do dalszego zgłębiania technologii webowych i tworzenia własnych aplikacji w czasie rzeczywistym z wykorzystaniem WebSocket w JavaScript i Node.js. Twoja przygoda z programowaniem dopiero się zaczyna!

Udostępnij na:
Wzorce projektowe w JavaScript – najlepsze praktyki
Web3.js – wprowadzenie do programowania blockchain w JavaScript

Zostaw komentarz :) Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Dołącz do społeczności DEVSTOCK - banner reklamowy

Najnowsze wpisy

Thumb
Cursor AI vs VS Code z Copilotem:
09 cze, 2025
Thumb
GitHub Copilot vs Cursor vs inne: Starcie
03 cze, 2025
Thumb
Jak AI zmienia programowanie w 2025? Narzędzia,
30 maj, 2025

Kursy Samodzielne

  • Kurs HTML - obrazek wyróżniający
    Kurs HTML – Zbuduj strukturę swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Podstawowy - obrazek wyróżniający
    Kurs CSS Podstawowy – Stwórz styl i układ swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Zaawansowany - obrazek wyróżniający
    Kurs CSS Zaawansowany – Opanuj nowoczesne techniki stylowania i układu
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs JS od podstaw - obrazek wyróżniający
    Kurs JavaScript od podstaw
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
  • Kurs JavaScript zaawansowany - obrazek wyróżniający
    Kurs JavaScript zaawansowany
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
klarna raty 0% - banner
Droga do kariery z Akademią Devstock
Banner reklamowy whitepress

Tagi

5G AI Architektura Cyberbezpieczeństwo Feedback Frontend Git IoT JavaScript Motywacja Nauka efektywna Optymalizacja i wydajność Programowanie React.JS Rozwój osobisty WebDevelopment
Logo FitBody Center Warszawa
Dołącz do społeczności DEVSTOCK - banner reklamowy

Produkty

  • Kurs HTML - obrazek wyróżniający
    Kurs HTML – Zbuduj strukturę swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Podstawowy - obrazek wyróżniający
    Kurs CSS Podstawowy – Stwórz styl i układ swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Zaawansowany - obrazek wyróżniający
    Kurs CSS Zaawansowany – Opanuj nowoczesne techniki stylowania i układu
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs JS od podstaw - obrazek wyróżniający
    Kurs JavaScript od podstaw
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
  • Kurs JavaScript zaawansowany - obrazek wyróżniający
    Kurs JavaScript zaawansowany
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
Group-5638-1

Devstock – Akademia programowania z gwarancją pracy

🏠 ul. Bronowska 5a,
03-995 Warszawa
📞 +48 517 313 589
✉️ contact@devstockacademy.pl

Linki

  • Poznaj firmę Devstock
  • Wejdź do społeczności Devstock
  • Polityka prywatności
  • Regulamin

FitBody Center

Strona

  • Strona główna
  • Kontakt

Newsletter

Bądź na bieżąco, otrzymuj darmową wiedzę i poznaj nas lepiej!


Icon-facebook Icon-linkedin2 Icon-instagram Icon-youtube Tiktok
Copyright 2025 Devstock. Wszelkie prawa zastrzeżone
Devstock AcademyDevstock Academy
Sign inSign up

Sign in

Don’t have an account? Sign up
Lost your password?

Sign up

Already have an account? Sign in

Zacznij kodować od zera – za 0 zł

Dołącz do społeczności Devstock i zgarnij 14 dni darmowego dostępu do naszej Akademii – pełnej lekcji, zadań, quizów i grywalizacji.

Przetestuj wszystko na luzie – bez zobowiązań.

  • 🟨 Nauka od podstaw, nawet jeśli nigdy nie kodował_ś
  • 🟨 Wszystko krok po kroku, jasno i praktycznie
  • 🟨 Idealna baza pod AI, automatyzacje i projekty
  • 🟨 Bez zobowiązań – testuj i ucz się we własnym tempie
CHCĘ DOSTĘP ZA 0 ZŁ – SPRAWDZAM!
SPRAWDZAM ZA 0 ZŁ!