Перейти до основного вмісту

Socket.io

Ця бібліотека покликана здійснювати взаємодію реального часу тим способом, який найбільше підходить для його учасників. Socket.io забезпечує двосторонній зв'язок у реальному часі та на основі подій. Він працює на будь-який платформі, браузері або пристрої, приділяючи однакову увагу надійності та швидкості. Socket.io складається з двох частин:

  • Сервер, який інтегрується (або монтується) з HTTP-сервером Node.JS socket.io
  • Клієнтська бібліотека, що завантажується на стороні браузера socket.io-client

Під час розробки, socket.io як ми побачимо, автоматично обслуговує і клієнта, тому поки що нам потрібно встановити тільки один модуль:

npm install socket.io

Також додамо express у наш додаток і створимо файл app.js

const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);

app.use(express.static('public'));

io.on('connection', socket => {
console.log('User connected!');
socket.emit('message', 'User connected!');
});

http.listen(3000, () => {
console.log('listening on *:3000');
});

Зверніть увагу, що при ініціалізації екземпляра socket.io, ми передаємо http об'єкт (HTTP-сервер). Потім прослуховуємо подію connection для вхідних сокетів та виводимо повідомлення User connected! у консоль, а після відправляємо подію message на клієнт з тим самим повідомленням. В папці public розташуємо файл index.html, який буде нашою клієнтською частиною

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<script src="/socket.io/socket.io.js"></script>
<title>SocketIO</title>
</head>
<body>
<script>
const socket = io.connect('/');
socket.on('message', data => {
console.log(data);
});
</script>
</body>
</html>

Все, що потрібно, щоб почати працювати з вебсокетами це завантажити socket.io-client (робимо GET запит /socket.io/socket.io.js), скрипт надає глобальну змінну io, а потім можна підключитися до сервера io.connect('/') та поставити обробник на подію message

Якщо запустимо сервер, то при зверненні на адресу http://localhost:3000/ в консолі браузера ми побачимо повідомлення User connected!

Розглянемо докладніше події серверної та браузерної частин socket.io.

Ідея побудови sосkеt.iо-додатків полягає у тому, що її частини — серверна і клієнтська - мають однакові властивості та методи, однак список обробників подій у них різний

У сервера визначених подій лише три:

  1. connection — подія настає при встановленні з'єднання з клієнтом;
  2. message — подія настає при отриманні повідомлення від клієнта;
  3. disconnect (дисконект) — розрив з'єднання.

Документацію каже, що є ще подія anything, і воно, мабуть, саме головне — ми можемо створювати свої події. Ви можете створювати скільки завгодно багато своїх подій. Наприклад, повідомлення про досягнення певної кількості учасників або настання нового часу доби тощо.

У браузерної частини socket.io подій більше:

  1. connecting — подія настає в процесі встановлення з'єднання з сервером;
  2. connect_failed — подія настає при невдалій спробі з'єднання;
  3. connect — подія настає при встановленні з'єднання з сервером;
  4. message — подія настає при отриманні повідомлення від сервера;
  5. disconnect — подія настає при розриві з'єднання з сервером;
  6. reconnecting (може виникати неодноразово) — подія настає при спробі відновлення з'єднання;
  7. reconnect — подія настає при відновленні з'єднання;
  8. error — події помилки;
  9. anything — будь-яка подія.

Після вступної частини саме час реалізувати простий чат на бібліотеці Socket.io