Creating Socket.IO Server using Express Generator
Socket.IO is a library for real-time communication between the server and the client. In Socket.IO, the headers are shared only once and it also works on the top of the TCP layer. Web Sockets are the base of the Socket.IO library. It is easier to implement the Socket.IO in express applications that are not formed with the express-generator.
Socket.IO mainly works on events-based communication. Here the server or the client emits an event and it is caught by another one.
Installation of modules:
Install the Express Generator:
npm install -g express-generator
Create the express application:
npm express applicaion_name
For example, you can create “npm express socketIOTest”
We can also set the view engine while making the express application as:
Setting the view Engine (Optional)
npm express socketIOTest --view=jade
Install the socket IO:
npm install socket.io --save npm install
Steps to create the socket server:
Go to the App.js file and Import Socket.IO and HTTP module as:
const http=require("http"); const socketio=require("socket.io");
Create a socket IO server:
javascript
const createError = require( 'http-errors' ); const express = require( 'express' ); const path = require( 'path' ); const cookieParser = require( 'cookie-parser' ); const logger = require( 'morgan' ); const http = require( "http" ); const socketio = require( "socket.io" ); const app = express(); const indexRouter = require( './routes/index' ); const 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 }; |
Now go to the www file inside the BIN folder and replace the code with the following code:
javascript
#!/usr/bin/env node // Module dependencies const app = require( '../app' ).app; const debug = require( 'debug' )( 'socketiotest:server' ); const http = require( 'http' ); // Get port from environment and store in Express const port = normalizePort(process.env.PORT || '3000' ); app.set( 'port' , port); // Create HTTP server const 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) { let 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; } let 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() { let addr = server.address(); let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug( 'Listening on ' + bind); } |
This is how you can link the Socket.IO with the express server.
Contact Us