Czat online w JavaScripcie: tutorial z WebSocketami i Node.js

Czat online w JavaScripcie: tutorial z WebSocketami i Node.js

Czat online to bardzo popularna aplikacja, która pozwala kilku osobom rozmawiać przez internet w czasie rzeczywistym. Ten poradnik pokazuje, jak zbudować czat online w JavaScripcie, korzystając z API WebSockets i dokładając CSS oraz HTML, żeby dopracować interfejs użytkownika.

Zanim zaczniesz, zainstaluj NodeJS na swoim komputerze

Node.js jest do tego poradnika niezbędny, bo to środowisko uruchomieniowe JavaScriptu, które pozwala wykonywać kod JavaScript po stronie serwera. W naszym poradniku o budowie czatu online w JavaScripcie korzystamy z API WebSockets, dostępnego wyłącznie po stronie serwera. Node.js pozwala nam więc postawić serwer WebSocket i obsłużyć połączenia oraz komunikację w czasie rzeczywistym między klientami.

Zanim przejdziesz dalej, trzeba zatem zainstalować Node.js na komputerze. Instalator pobierzesz z oficjalnej strony (https://nodejs.org/) i zainstalujesz, wykonując instrukcje z ekranu. Po instalacji powinieneś móc uruchamiać kod JavaScript po stronie serwera poleceniem „node” w terminalu.

Instalacja pakietu ws przez NPM

Zainstaluj moduł „ws” przez npm (Node Package Manager). Otwórz terminal i wpisz następujące polecenie:

php
npm install ws

Czat w JavaScripcie

Czat online to bardzo popularna aplikacja, która pozwala kilku osobom rozmawiać przez internet w czasie rzeczywistym. Ten poradnik pokazuje, jak zbudować czat online w JavaScripcie, korzystając z API WebSockets i dokładając CSS oraz HTML, żeby dopracować interfejs użytkownika.

Kod HTML

Utwórz stronę HTML z formularzem do wpisywania wiadomości i elementem, w którym będą się one wyświetlać. Możesz użyć poniższego kodu:

index.html

html
<!DOCTYPE html>
<html>
  <head>
    <title>Chat en ligne</title>
    <link rel="stylesheet" href="http://style.css">
  </head>
  <body>
    <div id="chat">
      <div id="messages">
        <!-- Les messages seront affichés ici -->
      </div>
      <form id="formulaire">
        <input type="text" id="message" placeholder="Entrez votre message ici">
        <button type="submit">Envoyer</button>
      </form>
    </div>
  </body>
</html>

Kod CSS

Dodaj CSS, żeby dopracować interfejs swojego czatu online. Za podstawę możesz wziąć poniższy kod:

style.css

css
#chat {
    width: 500px;
    margin: 0 auto;
    font-family: sans-serif;
}

#messages {
    border: 1px solid #ccc;
    height: 300px;
    overflow-y: scroll;
    padding: 10px;
}

#formulaire {
    padding: 10px;
    text-align: center;
}

#formulaire input[type="text"] {
    border: 1px solid #ccc;
    border-radius: 3px;
    padding: 8px;
    width: 80%;
}

#formulaire button[type="submit"] {
    border: none;
    border-radius: 3px;
    padding: 8px;
    background-color: #4caf50;
    color: #fff;
}

Kod JavaScript po stronie serwera

Postaw serwer WebSocket na Node.js i module „ws”. Dla serwera możesz użyć poniższego kodu:

server.js

javascript
const WebSocket = require('ws');

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

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

ws.send('Bienvenue sur le chat Gekkode!');
});

console.log('Server started on port 9999');

Żeby uruchomić serwer NodeJS, wpisz w konsoli poniższą linijkę, w katalogu z projektem i plikiem server.js

server.js

javascript
node server.js

Jeśli się udało, powinieneś zobaczyć „Server started on port 9999”. Kodu po stronie serwera jeszcze nie skończyliśmy, wrócimy do niego i rozbudujemy go w dalszej części poradnika.
Na razie zajrzyjmy raczej na front.

Kod JavaScript po stronie frontu

Podłącz swoją stronę HTML do serwera WebSocket przez javascriptowy obiekt WebSocket. Na start możesz użyć poniższego kodu:

script.js

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

socket.onopen = function() {
    console.log('Connecté au serveur WebSocket');
};

socket.onmessage = function(event) {
    const message = document.createElement('div');
    message.textContent = event.data;
    document.getElementById('messages').appendChild(message);
};

Wiadomości wpisane przez użytkownika wyślij na serwer WebSocket metodą „send” obiektu WebSocket. Na start możesz użyć poniższego kodu:

script.js

javascript
document.getElementById('formulaire').addEventListener('submit', function(event) {
  event.preventDefault();
  const message = document.getElementById('message').value;
  socket.send(message);
  document.getElementById('message').value = '';
});

Jak rozesłać wiadomości czatu do połączonych użytkowników

Domyślnie wiadomości się nie pojawią, jeśli serwer Node.js nie odeśle ich do połączonych klientów.

Musimy wrócić do server.js i zmienić kilka linijek, żeby serwer Node.js rozsyłał wiadomości do połączonych klientów naszego czatu online w JavaScripcie:

script.js

javascript
const WebSocket = require('ws');

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

const clients = [];

wss.on('connection', function connection(ws) {
    clients.push(ws);

ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        broadcast(String(message));
    });

ws.send('Bienvenue sur le chat Gekkode!');
});

function broadcast(message) {
    clients.forEach(function(client) {
        client.send(message);
    });
}

console.log('Server started on port 9999');
[object Blob]

Możesz natknąć się na problem z typem danych, jeśli po stronie frontu zamiast wiadomości wysłanych przez użytkowników pojawia się „[object Blob]”.

Sprawdź, czy z serwera naprawdę wysyłasz tekst, a nie obiekty Blob. Upewnij się, że metoda „send” obiektu WebSocket dostaje jako argument ciąg znaków:

ws.send(String(message));

Masz teraz cały kod z samouczka: nie zapomnij uruchomić npm install, aby pobrać zależności, i wystartować serwer Node.js.

I to tyle: wiesz już, jak po stronie frontu odbierać i wyświetlać wiadomości w czacie online w JavaScripcie. Jeśli artykuł ci się spodobał, śledź blog w mediach społecznościowych.

JavaScript

Damien Flandrin Web developer od 2010 roku, twórca Gekkode i Email Impact. Każdy artykuł jest sprawdzany na prawdziwym projekcie przed publikacją. Kontakt
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.