DEV Community

Cover image for Introduction to WebSockets with Node.js and Socket.io
Artem Turlenko
Artem Turlenko

Posted on

Introduction to WebSockets with Node.js and Socket.io

WebSockets enable real-time, bi-directional communication between clients and servers. They're ideal for applications like chat platforms, real-time notifications, and interactive games. Socket.io is one of the most popular libraries for implementing WebSockets in Node.js due to its simplicity and robust features.

What are WebSockets?

WebSockets provide a persistent connection between a client and a server, allowing real-time data exchange without the overhead of repeated HTTP requests.

Setting Up a WebSocket Server with Socket.io

Here's how to quickly set up a WebSocket server using Node.js and Socket.io:

Step 1: Initialize your project

npm init -y
npm install express socket.io
Enter fullscreen mode Exit fullscreen mode

Step 2: Create a basic server

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

const app = express();
const server = http.createServer(app);
const io = new Server(server);

io.on('connection', (socket) => {
  console.log('a user connected');

  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});
Enter fullscreen mode Exit fullscreen mode

Setting Up the Client

To interact with your server, set up a client-side Socket.io connection:

<!DOCTYPE html>
<html>
<head>
  <title>Socket.io Example</title>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    const socket = io();
  </script>
</head>
<body>
  <h1>Socket.io is connected!</h1>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Sending and Receiving Messages

Socket.io makes sending and receiving messages easy.

Server-side example:

io.on('connection', (socket) => {
  socket.on('chat message', (msg) => {
    console.log('message:', msg);
    io.emit('chat message', msg);
  });
});
Enter fullscreen mode Exit fullscreen mode

Client-side example:

<input id="input" autocomplete="off"><button onclick="sendMessage()">Send</button>
<script>
  const socket = io();

  function sendMessage() {
    const message = document.getElementById('input').value;
    socket.emit('chat message', message);
  }

  socket.on('chat message', (msg) => {
    console.log('Message received:', msg);
  });
</script>
Enter fullscreen mode Exit fullscreen mode

Practical Applications

  • Real-time chat apps
  • Online gaming
  • Live dashboards and analytics
  • Collaborative tools

Best Practices

  • Always handle connections and disconnections properly.
  • Secure your WebSocket connections with authentication.
  • Manage room or namespace effectively for scalable apps.

Conclusion

WebSockets with Node.js and Socket.io provide an efficient solution for real-time applications, making your apps interactive and responsive.

Have you built any interesting projects using WebSockets? Share your experience below! 🚀

Top comments (0)