Back to blog
WebSockets Python Real-time Apps Chat Applications

Real-Time Chat Applications with WebSockets in Python

B Bhairav 3 min read
Real-Time Chat Applications with WebSockets in Python

The Buzz About WebSockets

Hey fellow devs! Have you ever wanted to build a real-time chat application? You know, like the kind where users can type away and their messages appear instantly on the screen? That’s where WebSockets come in – they’re a game-changer for building real-time web applications.

In this post, we’ll explore how to use WebSockets in Python to build a scalable, real-time chat app. Don’t worry if you’re new to WebSockets; I’ll guide you through the process with a practical code example.

What are WebSockets?

WebSockets are a protocol that enables bidirectional, real-time communication between a web browser (or client) and a server. They allow for full-duplex communication, meaning that both the client and server can send data to each other simultaneously.

How Do WebSockets Work?

Here’s a high-level overview of how WebSockets work:

  1. Handshake: The client (e.g., a web browser) sends a request to the server to establish a WebSocket connection.
  2. Establish Connection: The server accepts the request and establishes a WebSocket connection with the client.
  3. Bi-Directional Communication: Once the connection is established, both the client and server can send data to each other.

Building a Real-Time Chat App with WebSockets in Python

To build a real-time chat app with WebSockets in Python, we’ll use the websockets library. Here’s a simple example of a chat server that allows multiple clients to connect and send messages:

import asyncio
import websockets

# Define a class for the chat server
class ChatServer:
    def __init__(self):
        self.clients = []

    async def handle_client(self, websocket):
        # Add the client to the list of clients
        self.clients.append(websocket)

        # Wait for incoming messages from the client
        while True:
            message = await websocket.recv()
            # Broadcast the message to all clients
            for client in self.clients:
                client.send(message)

    async def start(self):
        # Start the WebSocket server
        async with websockets.serve(self.handle_client, 'localhost', 8765):
            await asyncio.Future()

# Create an instance of the chat server
chat_server = ChatServer()

# Start the chat server
async def main():
    await chat_server.start()

asyncio.run(main())

This code defines a ChatServer class that handles incoming WebSocket connections and broadcasts messages to all connected clients. The start method starts the WebSocket server on localhost:8765.

Running the Chat Server

To run the chat server, save the code to a file (e.g., chat_server.py) and run it using python chat_server.py. Then, open multiple web browsers and navigate to ws://localhost:8765. You should see a chat interface where you can type messages and see them appear in real-time on other clients.

Conclusion

WebSockets are a powerful tool for building real-time web applications. With the websockets library in Python, you can create scalable, real-time chat apps that allow users to communicate in real-time. So, what’s your next project? Are you ready to build a real-time chat app with WebSockets?


B

Written by Bhairav

Building AI products for Indian developers and small businesses. Founder of DigiAI India. Bootstrapped, profitable, and obsessed with solving real problems.

More from Bhairav