Add real-time WebSocket events to Flask with Flask-SocketIO: rooms, broadcast, and namespaces.
WebSockets with Flask-SocketIO
pip install flask-socketio eventlet
from flask_socketio import SocketIO, emit, join_room, leave_room
socketio = SocketIO(app, cors_allowed_origins="*")
@socketio.on("connect")
def on_connect():
emit("connected", {"message": "Welcome!"})
@socketio.on("message")
def on_message(data):
room = data.get("room", "general")
emit("message", {"text": data["text"], "user": current_user.name}, room=room)
@socketio.on("join")
def on_join(data):
join_room(data["room"])
emit("joined", {"room": data["room"]})
@socketio.on("disconnect")
def on_disconnect():
print("Client disconnected")
# JavaScript
// const socket = io();
// socket.emit("join", { room: "general" });
// socket.on("message", (data) => console.log(data));
if __name__ == "__main__":
socketio.run(app, debug=True)