nodejs socketio

 Socketio is a library based on websocket. It supports stateful protocol.


Cdn: <script src="https://cdn.socket.io/4.7.4/socket.io.min.js"></script>

Note: I have inserted socket.js inside the ‘public’ folder.


index.js

const express = require('express')

const app = express()

const port = 3000

const path = require('path')


// socketio integration

const { createServer } = require('node:http');

const server = createServer(app);

const { Server } = require('socket.io');

const io = new Server(server);



app.use('/public', express.static('public'))

app.get('/',function(req, res){

    res.sendFile(path.resolve(__dirname, 'templates/message.html'))

})


io.on('connection', (socket) => {

    console.log('a user connected');

    socket.on('disconnect', () => {

      console.log('user disconnected');

    });


    socket.on('chat_message', (msg) => {

        console.log('message: ' + msg);

        io.emit('chat_message', (msg));

      });

  });

  


  server.listen(port, () => {

    console.log('server running at ', port);

  });


templates/Message.html

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>message home</title>

</head>

<style>

    body {

        margin: 0;

        padding-bottom: 3rem;

        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

    }


    #form {

        background: rgba(0, 0, 0, 0.15);

        padding: 0.25rem;

        position: fixed;

        bottom: 0;

        left: 0;

        right: 0;

        display: flex;

        height: 3rem;

        box-sizing: border-box;

        backdrop-filter: blur(10px);

    }


    #input {

        border: none;

        padding: 0 1rem;

        flex-grow: 1;

        border-radius: 2rem;

        margin: 0.25rem;

    }


    #input:focus {

        outline: none;

    }


    #form>button {

        background: #333;

        border: none;

        padding: 0 1rem;

        margin: 0.25rem;

        border-radius: 3px;

        outline: none;

        color: #fff;

    }


    #messages {

        list-style-type: none;

        margin: 0;

        padding: 0;

    }


    #messages>li {

        padding: 0.5rem 1rem;

    }


    #messages>li:nth-child(odd) {

        background: #f1efef;

    }

</style>


<body>



    <ul id="messages"></ul>

    <form id="form" action="">

        <input id="input" autocomplete="off" /><button>Send</button>

    </form>



    <script src="../public/socket.js"></script>


    <script>

        const socket = io();

      

        const form = document.getElementById('form');

        const input = document.getElementById('input');

        const messages = document.getElementById('messages');

      

        form.addEventListener('submit', (e) => {

          e.preventDefault();

          if (input.value) {

            socket.emit('chat_message', input.value);

            input.value = '';

          }

          socket.emit('shimanta', 'is a hacker');

        });

      

        socket.on('chat_message', (msg) => {

          const item = document.createElement('li');

          item.textContent = msg;

          messages.appendChild(item);

          window.scrollTo(0, document.body.scrollHeight);

        });


      </script>


</body>


</html>


Code structure

Code structure


Output looks like


Popular posts from this blog

MCSL 216 MCA NEW Practical ~ common questions suggestions

dev chaeatsheet

STRAPI