GitHub Repo for Testing
Socket.io is a library that enables real-time, bidirectional and event-based communication between the browser and the server. It is built on top of the WebSocket protocol and provides additional features like fallback to HTTP long-polling or automatic reconnection.
In this article, we will learn how to use Socket.io at a basic level by creating a simple chat app. We will use Node.js for the server and HTML for the client. We will also use the official documentation as a reference and include code examples.
Step 1: Install Socket.io
The first step is to install Socket.io on both the server and the client. We will use npm for the server and a CDN for the client.
Server
To install Socket.io on the server, follow these steps:
- Open your terminal and navigate to your project folder.
- Run the following command:
npm install socket.io
This will add Socket.io as a dependency in your package.json file.
Client
To install Socket.io on the client, follow these steps:
- Create a folder named
public
in your project folder. This is where we will put our HTML file later. - Create a file named
index.html
in thepublic
folder and add the following script tag in the head section:
<script src="/socket.io/socket.io.js"></script>
This will load the Socket.io client library from the server.
Step 2: Create a server
The next step is to create a server that listens for new connections and handles chat messages. We will use Express to create a simple web server and Socket.io to enable WebSocket communication.
To create a server, follow these steps:
- Create a file named
server.js
in your project folder. - Import the
express
,http
andsocketio
modules:
const express = require("express");
const http = require("http");
const socketio = require("socket.io");
- Create an Express app and an HTTP server:
// Create a new express application
const app = express();
// Create a new http server
const server = http.createServer(app);
- Create a Socket.io instance and pass it the HTTP server:
// Create a new socket.io instance
const io = socketio(server);
- Serve the static files from the public folder:
// Serve the static files from the public folder
app.use(express.static("public"));
- Listen for new connections from clients:
// Listen for new connections
io.on("connection", (socket) => {
// The socket parameter represents a single connection between a client and the server.
// You can use socket.on() and socket.emit() to listen for and send events.
});
- Listen for chat messages from clients:
// Listen for chat messages
socket.on("chat message", (msg) => {
// The msg parameter contains the message sent by the client.
// You can use console.log() to print it to the terminal.
console.log("Message: " + msg);
// You can use socket.broadcast.emit() to broadcast the message to all other clients connected to the server.
// This means that everyone except the sender will receive the message.
socket.broadcast.emit("chat message", msg);
});
- Listen for disconnections from clients:
// Listen for disconnections
socket.on("disconnect", () => {
// This happens when a client closes their browser or loses their network connection.
// You can use console.log() to print it to the terminal.
console.log("A user disconnected");
});
- Start the server on port 3000:
// Start the server on port 3000
server.listen(3000, () => {
// You can use console.log() to print it to the terminal.
console.log("Server listening on port 3000");
});
Step 3: Create a client
The final step is to create a client that connects to the server and sends and receives chat messages. We will use HTML and JavaScript for this.
To create a client, follow these steps:
- Open your
index.html
file in thepublic
folder. - Add some basic HTML structure and title:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat App</title>
<!-- Link to socket.io client script -->
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>Chat App</h1>
<!-- We will add some more HTML elements here later -->
</body>
</html>
- Add some HTML elements for displaying and sending chat messages:
<!-- index.html -->
<body>
<h1>Chat App</h1>
<!-- A list to display the chat messages -->
<ul id="messages"></ul>
<!-- A form to send a chat message -->
<form id="form">
<input id="input" type="text" placeholder="Type a message...">
<button type="submit">Send</button>
</form>
</body>
- Add some JavaScript code to connect to the server and handle chat events:
<!-- index.html -->
<script>
// Connect to the socket.io server
const socket = io();
// Get the DOM elements
const form = document.getElementById('form');
const input = document.getElementById('input');
const messages = document.getElementById('messages');
// Add a function to append a new message to the list
const appendMessage = (msg) => {
const li = document.createElement('li');
li.textContent = msg;
messages.appendChild(li);
};
// Listen for form submission
form.addEventListener('submit', (e) => {
e.preventDefault();
if (input.value) {
// Emit the chat message to the server
socket.emit('chat message', input.value);
// Append the message to the list as self
appendMessage(`You: ${input.value}`);
// Clear the input field
input.value = '';
}
});
// Listen for chat messages from the server
socket.on('chat message', (msg) => {
// Append the message to the list as other
appendMessage(`Other: ${msg}`);
});
</script>
Let's break down this code:
- We use
io()
to connect to the socket.io server. This returns a socket object that we can use to communicate with the server. - We use
document.getElementById()
to get the DOM elements that we need: the form, the input and the messages list. - We define a function named
appendMessage
that takes a message as a parameter and appends it to the messages list as a new list item. - We use
form.addEventListener()
to listen for the submit event on the form. This happens when the user clicks on the send button or presses enter on the input field. - We use
e.preventDefault()
to prevent the default behavior of reloading the page when submitting a form. - We use
if (input.value)
to check if the input field is not empty. - We use
socket.emit()
to emit a custom event namedchat message
to the server. We pass the input value as the data for this event. - We use
appendMessage()
to append the message to the messages list as self. We use a template literal to addYou:
before the message. - We use
input.value = ''
to clear the input field after sending a message. - We use
socket.on()
to listen for a custom event namedchat message
from the server. This happens when another client sends a message and the server broadcasts it to us. - We use
appendMessage()
to append the message to the messages list as other. We use a template literal to addOther:
before the message.
Step 4: Test your app
The last step is to test your app and see if it works as expected. To do this, follow these steps:
- Open your terminal and navigate to your project folder.
- Run your server by typing:
node server.js
You should see a message saying Server listening on port 3000
.
- Open your browser and go to http://localhost:3000. You should see your chat app with an empty messages list and an input field with a send button.
- Open another browser tab or window and go to http://localhost:3000 again.
- In one of the tabs, type a message in the input field and click on the send button. You should see your message appear in both tabs with
You:
before it. - In the other tab, type a different message in the input field and click on the send button. You should see your message appear in both tabs with
Other:
before it. - Try closing one of the tabs and see what happens in the terminal. You should see a message saying
A user disconnected
. - Try opening a new tab and go to http://localhost:3000 again. You should see a message saying
A user connected
in the terminal and the messages list in the new tab.
Congratulations! You have successfully created a simple chat app using Socket.io at a basic level. You can now explore more features and options that Socket.io offers by reading the documentation or checking out some examples.
References
: https://socket.io/docs/v4
: https://socket.io/get-started/chat
Top comments (0)