Crear y ejecutar un proyecto Socket.io
¿Qué es Socket.io?
Socket.io es una biblioteca de JavaScript para comunicación bidireccional en tiempo real impulsada por eventos. Puede establecer un canal de comunicación eficiente y de baja latencia entre el navegador y el servidor. Socket.io admite el protocolo WebSocket, pero no se limita a él, también puede seleccionar automáticamente el mejor mecanismo de transmisión (como la sondeo largo) para garantizar la estabilidad de la conexión.
Características y ventajas principales de Socket.io
- Comunicación en tiempo real: Soporta comunicación bidireccional en tiempo real, adecuado para aplicaciones como salas de chat, juegos en línea, notificaciones en tiempo real, etc.
- Soporte multiplataforma: Puede ejecutarse en navegadores, Node.js y otras plataformas.
- Reconexión automática: Intenta reconectar automáticamente cuando se pierde la conexión.
- Impulsado por eventos: Se comunica a través de un mecanismo de eventos, simplificando el modelo de programación.
- Alta compatibilidad: Admite múltiples mecanismos de transmisión como WebSocket, sondeo largo con XHR, etc., asegurando que funcione en diversos entornos de red.
Usar Socket.io puede ayudar a los desarrolladores a construir rápidamente aplicaciones de comunicación en tiempo real eficientes.
Crear y ejecutar un proyecto Socket.io con ServBay
En este artículo, usaremos el entorno Node.js proporcionado por ServBay para crear y ejecutar un proyecto Socket.io. Utilizaremos la función 'host' de ServBay para configurar el servidor web y acceder al proyecto mediante un proxy inverso.
Crear proyecto Socket.io
Inicializar el proyecto
Primero, asegúrese de haber instalado el entorno Node.js proporcionado por ServBay. Luego, cree un nuevo proyecto Socket.io en el directorio raíz del sitio web recomendado por ServBay
/Applications/ServBay/www
:bashcd /Applications/ServBay/www mkdir servbay-socketio-app cd servbay-socketio-app npm init -y npm install express socket.io
1
2
3
4
5Crear archivo del servidor
Cree un archivo
server.js
en el directorio raíz del proyecto y agregue el siguiente código: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
26Crear archivo del cliente
Cree un archivo
index.html
en el directorio raíz del proyecto y agregue el siguiente código:html<!DOCTYPE html> <html> <head> <title>Socket.io Chat with 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
Entrar en modo desarrollador
Ejecutar servidor de desarrollo
Inicie el servidor de desarrollo y especifique el puerto (por ejemplo: 8585):
bashPORT=8585 node server.js
1Esto iniciará un servidor de desarrollo local y expondrá el puerto 8585.
Configurar proxy inverso en ServBay
Utilice la función 'host' de ServBay para acceder al servidor de desarrollo mediante proxy inverso. En la configuración de 'host' de ServBay, agregue un nuevo proxy inverso:
- Nombre:
My first Socket.io dev site
- Dominio:
servbay-socketio-test.dev
- Tipo de host:
Proxy inverso
- IP:
127.0.0.1
- Puerto:
8585
Consulte la guía para agregar un sitio web de desarrollo Node.js para más detalles.
- Nombre:
Acceder a modo desarrollo
Abra su navegador y visite
https://servbay-socketio-test.dev
para ver el proyecto en tiempo real. Dado que ServBay admite nombres de dominio personalizados y certificados SSL gratuitos, disfrutará de una mayor seguridad.
Desplegar versión de producción
Preparar entorno de producción
Asegúrese de que su proyecto funcione correctamente en el entorno de producción. Generalmente, los proyectos Socket.io no requieren pasos especiales de construcción, pero puede necesitar configurar variables de entorno u otras configuraciones.
Ejecutar servidor de producción
Inicie el servidor de producción y especifique el puerto (por ejemplo: 8586):
bashPORT=8586 NODE_ENV=production node server.js
1Configurar proxy inverso en ServBay
Utilice la función 'host' de ServBay para acceder al servidor de producción mediante proxy inverso. En la configuración de 'host' de ServBay, agregue un nuevo proxy inverso:
- Nombre:
My first Socket.io production site
- Dominio:
servbay-socketio-test.prod
- Tipo de host:
Proxy inverso
- IP:
127.0.0.1
- Puerto:
8586
- Nombre:
Acceder a modo producción
Abra su navegador y visite
https://servbay-socketio-test.prod
para ver la versión de producción. Con los nombres de dominio personalizados y certificados SSL gratuitos de ServBay, su sitio web tendrá mayor seguridad y credibilidad.
Conexión a bases de datos
ServBay ofrece soporte para bases de datos como Redis, MariaDB, PostgreSQL y MongoDB. Aquí hay ejemplos de cómo conectar cada una de estas bases de datos.
Conectar a MongoDB
Instale
mongoose
:bashnpm install mongoose
1Luego inclúyalo en su proyecto y conéctelo:
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
5Conectar a Redis
Instale
redis
:bashnpm install redis
1Luego inclúyalo en su proyecto y conéctelo:
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
10Conectar a MariaDB
Instale
mariadb
:bashnpm install mariadb
1Luego inclúyalo en su proyecto y conéctelo:
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
16Conectar a PostgreSQL
Instale
pg
:bashnpm install pg
1Luego inclúyalo en su proyecto y conéctelo:
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
Con los pasos anteriores, ha creado y ejecutado con éxito un proyecto Socket.io y ha utilizado las funciones proporcionadas por ServBay para gestionar y acceder a su proyecto, además de conectar múltiples bases de datos.