Creare e gestire un progetto Socket.io
Cos'è Socket.io?
Socket.io è una libreria JavaScript per comunicazioni in tempo reale bidirezionali basate su eventi. Può stabilire canali di comunicazione efficienti e a bassa latenza tra il browser e il server. Socket.io supporta il protocollo WebSocket, ma non si limita solo a questo; può anche selezionare automaticamente il meccanismo di trasporto migliore (come il polling lungo) per garantire la stabilità della connessione.
Caratteristiche principali e vantaggi di Socket.io
- Comunicazione in tempo reale: Supporta la comunicazione bidirezionale in tempo reale, adatta a chat room, giochi online, notifiche in tempo reale e altri scenari.
- Supporto multipiattaforma: Può essere eseguito su browser, Node.js e altre piattaforme.
- Riconnessione automatica: Tenta automaticamente di riconnettersi quando la connessione viene interrotta.
- Basato su eventi: Utilizza il meccanismo degli eventi per la comunicazione, semplificando il modello di programmazione.
- Alta compatibilità: Supporta vari meccanismi di trasporto come WebSocket, polling lungo XHR, ecc., per garantire il funzionamento in vari ambienti di rete.
Usare Socket.io aiuta gli sviluppatori a costruire rapidamente applicazioni di comunicazione in tempo reale ed efficienti.
Creare e gestire un progetto Socket.io con ServBay
In questo articolo, useremo l'ambiente Node.js fornito da ServBay per creare e gestire un progetto Socket.io. Useremo la funzione "Host" di ServBay per impostare un server web e accedere al progetto tramite un proxy inverso.
Creare un progetto Socket.io
Inizializzare il progetto
Prima di tutto, assicurati di aver installato l'ambiente Node.js fornito da ServBay. Poi, nella directory radice consigliata da ServBay
/Applications/ServBay/www
, crea un nuovo progetto Socket.io:bashcd /Applications/ServBay/www mkdir servbay-socketio-app cd servbay-socketio-app npm init -y npm install express socket.io
1
2
3
4
5Creare il file del server
Nella directory radice del progetto, crea un file
server.js
e aggiungi il seguente codice:javascriptconst express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIo(server); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('a user connected'); socket.on('disconnect', () => { console.log('user disconnected'); }); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); }); const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Server running on port ${port}`); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26Creare il file del client
Nella directory radice del progetto, crea un file
index.html
e aggiungi il seguente codice:html<!DOCTYPE html> <html> <head> <title>Socket.io Chat con ServBay</title> <style> ul { list-style-type: none; padding: 0; } li { padding: 8px; margin-bottom: 10px; background-color: #f3f3f3; } input { padding: 10px; width: 300px; } button { padding: 10px; } .servbay-banner { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; font-size: 20px; margin-bottom: 20px; } </style> </head> <body> <div class="servbay-banner">Welcome to ServBay Socket.io Chat!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var form = document.getElementById('form'); var input = document.getElementById('input'); form.addEventListener('submit', function(e) { e.preventDefault(); if (input.value) { socket.emit('chat message', input.value); input.value = ''; } }); socket.on('chat message', function(msg) { var item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); window.scrollTo(0, document.body.scrollHeight); }); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Entrare in modalità di sviluppo
Eseguire il server di sviluppo
Avvia il server di sviluppo e specifica la porta (ad esempio, 8585):
bashPORT=8585 node server.js
1Questo avvierà un server di sviluppo in locale e esporrà la porta 8585.
Configurare il proxy inverso dell'host di ServBay
Usa la funzionalità "Host" di ServBay per accedere al server di sviluppo tramite un proxy inverso. Nelle impostazioni "Host" di ServBay, aggiungi un nuovo proxy inverso:
- Nome:
My first Socket.io dev site
- Dominio:
servbay-socketio-test.dev
- Tipo di host:
Proxy inverso
- IP:
127.0.0.1
- Porta:
8585
Per istruzioni dettagliate, consulta Aggiungere un sito di sviluppo Nodejs.
- Nome:
Accedere alla modalità di sviluppo
Apri il browser e visita
https://servbay-socketio-test.dev
per visualizzare il progetto in tempo reale. Poiché ServBay supporta nomi di dominio personalizzati e certificati SSL gratuiti, godrai di una maggiore sicurezza.
Distribuire la versione di produzione
Preparare l'ambiente di produzione
Assicurati che il tuo progetto funzioni correttamente nell'ambiente di produzione. In genere, i progetti Socket.io non necessitano di passaggi di costruzione particolari, ma potresti dover impostare alcune variabili d'ambiente o effettuare altre configurazioni.
Eseguire il server di produzione
Avvia il server di produzione e specifica la porta (ad esempio, 8586):
bashPORT=8586 NODE_ENV=production node server.js
1Configurare il proxy inverso dell'host di ServBay
Usa la funzionalità "Host" di ServBay per accedere al server di produzione tramite un proxy inverso. Nelle impostazioni "Host" di ServBay, aggiungi un nuovo proxy inverso:
- Nome:
My first Socket.io production site
- Dominio:
servbay-socketio-test.prod
- Tipo di host:
Proxy inverso
- IP:
127.0.0.1
- Porta:
8586
- Nome:
Accedere alla modalità di produzione
Apri il browser e visita
https://servbay-socketio-test.prod
per visualizzare la versione di produzione. Grazie ai nomi di dominio personalizzati e ai certificati SSL gratuiti di ServBay, il tuo sito godrà di maggiore sicurezza e affidabilità.
Connessione al database
ServBay offre supporto per database come Redis, MariaDB, PostgreSQL e MongoDB. Di seguito sono riportati esempi su come connettersi a questi database.
Connettersi a MongoDB
Installa
mongoose
:bashnpm install mongoose
1Poi importalo e connettiti nel progetto:
javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-socketio-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB connected')) .catch(err => console.log(err));
1
2
3
4
5Connettersi a Redis
Installa
redis
:bashnpm install redis
1Poi importalo e connettiti nel progetto:
javascriptconst redis = require('redis'); const client = redis.createClient(); client.on('error', function (err) { console.log('Error ' + err); }); client.on('connect', function () { console.log('Redis client connected'); });
1
2
3
4
5
6
7
8
9
10Connettersi a MariaDB
Installa
mariadb
:bashnpm install mariadb
1Poi importalo e connettiti nel progetto:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_socketio_app' }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); conn.release(); //release to pool }) .catch(err => { console.log("Not connected due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Connettersi a PostgreSQL
Installa
pg
:bashnpm install pg
1Poi importalo e connettiti nel progetto:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', host: 'localhost', database: 'servbay_socketio_app', password: 'password', port: 5432, }); pool.connect((err, client, done) => { if (err) throw err; console.log('Connected to PostgreSQL'); done(); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Attraverso questi passaggi, hai creato e gestito con successo un progetto Socket.io utilizzando le funzionalità fornite da ServBay, connettendoti anche a vari database.