Socket.IO es una biblioteca para la comunicación en tiempo real entre el servidor y el cliente. En Socket.IO, los encabezados se comparten solo una vez y también funcionan en la parte superior de la capa TCP. Los Web Sockets son la base de la biblioteca Socket.IO. Es más fácil implementar Socket.IO en las aplicaciones express que no están formadas con express-generator.
Socket.IO funciona principalmente en comunicación basada en eventos. Aquí el servidor o el cliente emite un evento y está siendo captado por otro.
Instalación de módulos:
-
Instale el generador Express:
npm install -g express-generator
-
Crear la aplicación express:
npm express applicaion_name
Por ejemplo, puede crear «npm express socketIOTest»
-
También podemos configurar el motor de vista mientras hacemos la aplicación express como:
Configuración del motor de vista (Opcional)
npm express socketIOTest --view=jade
-
Instale el zócalo IO:
npm install socket.io --save npm install
Pasos para crear el servidor de socket:
- Vaya al archivo App.js e importe Socket.IO y el módulo http como:
var http=require("http"); var socketio=require("socket.io");
- Cree un servidor de E/S de socket:
var
createError = require(
'http-errors'
);
var
express = require(
'express'
);
var
path = require(
'path'
);
var
cookieParser = require(
'cookie-parser'
);
var
logger = require(
'morgan'
);
var
http = require(
"http"
);
var
socketio = require(
"socket.io"
);
var
app = express();
var
indexRouter = require(
'./routes/index'
);
var
usersRouter = require(
'./routes/users'
);
// Create the http server
const server = require(
'http'
).createServer(app);
// Create the Socket IO server on
// the top of http server
const io = socketio(server);
// View engine setup
app.set(
'views'
, path.join(__dirname,
'views'
));
app.set(
'view engine'
,
'hbs'
);
app.use(logger(
'dev'
));
app.use(express.json());
app.use(express.urlencoded({ extended:
false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname,
'public'
)));
app.use(
'/'
, indexRouter);
app.use(
'/users'
, usersRouter);
// Catch 404 and forward to error handler
app.use(
function
(req, res, next) {
next(createError(404));
});
// Error handler
app.use(
function
(err, req, res, next) {
// Set locals, only providing error
// in development
res.locals.message = err.message;
res.locals.error = req.app.get(
'env'
)
===
'development'
? err : {};
// render the error page
res.status(err.status || 500);
res.render(
'error'
);
});
module.exports = { app: app, server: server };
- Ahora ve al archivo www dentro de la carpeta BIN y reemplaza el código con el siguiente código:
#!/usr/bin/env node
// Module dependencies
var
app = require(
'../app'
).app;
var
debug = require(
'debug'
)(
'socketiotest:server'
);
var
http = require(
'http'
);
// Get port from environment and store in Express
var
port = normalizePort(process.env.PORT ||
'3000'
);
app.set(
'port'
, port);
// Create HTTP server
var
server = require(
"../app"
).server;
// Listen on provided port, on all
// network interfaces.
server.listen(port);
server.on(
'error'
, onError);
server.on(
'listening'
, onListening);
// Normalize a port into a number,
// string, or false.
function
normalizePort(val) {
var
port = parseInt(val, 10);
if
(isNaN(port)) {
// Named pipe
return
val;
}
if
(port >= 0) {
// Port number
return
port;
}
return
false
;
}
// Event listener for HTTP server "error" event
function
onError(error) {
if
(error.syscall !==
'listen'
) {
throw
error;
}
var
bind =
typeof
port ===
'string'
?
'Pipe '
+ port
:
'Port '
+ port;
// Handle specific listen errors with
// friendly messages
switch
(error.code) {
case
'EACCES'
:
console.error(bind
+
' requires elevated privileges'
);
process.exit(1);
break
;
case
'EADDRINUSE'
:
console.error(bind +
' is already in use'
);
process.exit(1);
break
;
default
:
throw
error;
}
}
// Event listener for HTTP server "listening" event.
function
onListening() {
var
addr = server.address();
var
bind =
typeof
addr ===
'string'
?
'pipe '
+ addr
:
'port '
+ addr.port;
debug(
'Listening on '
+ bind);
}
Así es como puede vincular el Socket.IO con el servidor express.