nodejs socketio
- Get link
- X
- Other Apps
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
- Get link
- X
- Other Apps