Back to blog
WebSockets Python Flask Socket.IO

Building Real-Time Web Apps with WebSockets in Python

R Bhairav 3 min read
Building Real-Time Web Apps with WebSockets in Python

Namaste, fellow devs!

I still remember the days when I was working on a real-time chat app for a friend’s startup. We were trying to find a way to update the chat interface instantly whenever a new message was sent. We experimented with different approaches, but nothing seemed to work smoothly. That’s when I stumbled upon WebSockets, and my life changed forever!

WebSockets are a protocol that allows for bidirectional, real-time communication between a client (usually a web browser) and a server. It’s like having a direct, unblockable channel to talk to your server, without having to make multiple requests to update the chat interface. In this blog post, I’ll share with you how to build real-time web apps using WebSockets in Python with Flask and Socket.IO.

What are WebSockets?

WebSockets are a part of the HTML5 specification, and they work by establishing a persistent, low-latency connection between the client and server. This connection can be used to send and receive data in both directions, allowing for real-time communication.

Why use WebSockets?

WebSockets are ideal for real-time web apps because they provide:

  • Low-latency: WebSockets allow for near-instant updates, which is crucial for real-time apps like live updates, live streaming, and gaming.
  • Bi-directional communication: WebSockets enable both the client and server to send and receive data, making it easier to build complex real-time interactions.
  • Efficient: WebSockets reduce the number of requests needed to update the chat interface, making it faster and more efficient.

Building a Real-Time Chat App with WebSockets in Python

Here’s a simple example of a real-time chat app using Flask, Socket.IO, and Python: from flask import Flask, render_template from flask_socketio import SocketIO, emit

app = Flask(name) app.config[‘SECRET_KEY’] = ‘secret!’ socketio = SocketIO(app)

Store all the connected clients in a list

clients = []

@app.route(’/’) def index(): return render_template(‘index.html’)

@socketio.on(‘connect’) def new_client(): clients.append(‘new client connected’) emit(‘new client connected’, {‘data’: ‘new client connected’})

@socketio.on(‘message’) def handle_message(data): clients.append(f’new message: {data[“message”]}’) emit(‘new message’, {‘data’: f’new message: {data[“message”]}’}, broadcast=True)

if name == ‘main’: socketio.run(app)

Real-Time Chat App socket.on('new message', function(data) { console.log(data); document.getElementById('chat-log').innerHTML += '<p>' + data.data + '</p>'; }); // Handle new client connection socket.on('new client connected', function(data) { console.log(data); document.getElementById('chat-log').innerHTML += '<p>' + data.data + '</p>'; }); // Send a message document.getElementById('send-button').addEventListener('click', function() { socket.emit('message', { message: document.getElementById('message-input').value }); }); </script>

Real-Time Chat App

<script src="/static/socket.io/socket.io.js"></script>

In this example, we’re using Flask as the server and Socket.IO as the WebSocket library. When a client connects, we add it to the clients list and broadcast a message to all connected clients. When a client sends a message, we add it to the clients list and broadcast it to all connected clients.

Conclusion

Building real-time web apps with WebSockets is easier than you think. With Flask and Socket.IO, you can create complex real-time interactions in no time. Remember, WebSockets are all about bi-directional communication and low-latency updates. So, go ahead and experiment with WebSockets, and see how it can take your web app to the next level!

Now, have you ever built a real-time web app using WebSockets? Share your experiences in the comments below!


R

Team Ruflo

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

More posts