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 the express applications that are not formed with express-generator.

Socket.IO mainly works on events based communication. Here the server or the client emits an event and it is being caught by another one.

Installation of modules:

  1. Install the Express Generator:

    npm install -g express-generator
  2. Create the express application:



    npm express applicaion_name

    For example you can create “npm express socketIOTest”

  3. We can also set the view engine while making the express application as:

    Setting the view Engine (Optional)

    npm express socketIOTest --view=jade
  4. Install the socket IO:

    npm install socket.io --save
    npm install

Steps to create the socket server:

  1. Go to the App.js file and Import Socket.IO and http module as:
    var http=require("http");
    var socketio=require("socket.io");
    
  2. Create a socket IO server:
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    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 };

    chevron_right

    
    

  3. Now go to the www file inside the BIN folder and replace the code with the following code:
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #!/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);
    }

    chevron_right

    
    

This is how you can link the Socket.IO with the express server.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.