This is a simple real-time chat application built with Go, WebSockets, and Redis Pub/Sub. Users can join the chat by connecting to the WebSocket server and will receive messages from other users in real-time.
- Real-Time Communication: Messages are sent and received instantly using WebSockets.
- Redis Pub/Sub: Used to broadcast messages to all connected users efficiently.
- Graceful Shutdown: Ensures all connections are closed properly when the server shuts down.
git clone https://github.com/yourusername/redis-chat-app.git
cd redis-chat-app
This application uses the github.com/go-redis/redis/v8 and github.com/gorilla/websocket packages. You can install them with:
go get github.com/go-redis/redis/v8
go get github.com/gorilla/websocket
Ensure your Redis server is running on localhost:6379
. If it's hosted elsewhere, update the redisAddr
constant in the code to reflect the correct address.
Start the server by running:
go run main.go
The server will start on http://localhost:8081.
To join the chat, open multiple browser tabs (or WebSocket clients) and connect to:
ws://localhost:8081/chat/username
Replace username with a unique name for each user. Messages sent by one user will be received by all other connected users.
Initiate chat
![Initiate chat](https://private-user-images.githubusercontent.com/46742197/385223120-d1c87c4c-2ed3-4147-9770-60707484a3bf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzA0MTUsIm5iZiI6MTczOTM3MDExNSwicGF0aCI6Ii80Njc0MjE5Ny8zODUyMjMxMjAtZDFjODdjNGMtMmVkMy00MTQ3LTk3NzAtNjA3MDc0ODRhM2JmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MjE1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYwMzEwNTRmMGMyMjAzOThiNDlhMTdlMzcwNzMwMTljNzYzMGZlZDljYWM2ZWIyMjg5OTQ4ODBlMWM1MDBlOGQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.8uPZwXW-n8RXzx_MAGF-EuZPhZ3sw1kzBpWBCuCD1UA)
User 1
![user1](https://private-user-images.githubusercontent.com/46742197/385223181-175fdf68-6df5-4b1d-885f-ab4b1f170db8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzA0MTUsIm5iZiI6MTczOTM3MDExNSwicGF0aCI6Ii80Njc0MjE5Ny8zODUyMjMxODEtMTc1ZmRmNjgtNmRmNS00YjFkLTg4NWYtYWI0YjFmMTcwZGI4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MjE1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVhODMyZmQyZTBmYTY5YzQwOTBkMWNmYTY0NjczMDgyYjlmMjRjOWFlOTczYmEwOTU1NTVhNzRkODdhZDlhZTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yLZ-lvxHIdswu-aj4XzNIRFqCgAyzP9ZRwf5NHVDzj0)
User 2
![user2](https://private-user-images.githubusercontent.com/46742197/385223224-e9aafc9e-0e89-4600-9bbf-650f82c9b5a9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzA0MTUsIm5iZiI6MTczOTM3MDExNSwicGF0aCI6Ii80Njc0MjE5Ny8zODUyMjMyMjQtZTlhYWZjOWUtMGU4OS00NjAwLTliYmYtNjUwZjgyYzliNWE5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MjE1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBhMTQ5ZDQyNmE5ODlmNThiMGY3Njc2OTJiN2ZiYTE2NzIwNDFhMGFmNTVlZjlhNTdiNTcxMTU1OGE4MzY3MzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.JhHaBFjxuIySqCYrV6jB2_pEfNbnh2HHB03AMbTsrSc)
User 3
![user3](https://private-user-images.githubusercontent.com/46742197/385223277-9c7a05ea-6af5-46b0-b2c9-d1e783a26923.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzA0MTUsIm5iZiI6MTczOTM3MDExNSwicGF0aCI6Ii80Njc0MjE5Ny8zODUyMjMyNzctOWM3YTA1ZWEtNmFmNS00NmIwLWIyYzktZDFlNzgzYTI2OTIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MjE1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTczNzQ4NWJmYzc1NWZjOTk1MjExZmI3YTk0MDAyNDEzNTZiMWIxOWE5ZTM0YWQ2MWY2MjJhM2IxOGU3MmZlZGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lir0elkwSZ0zeblZvjj6TaA2gK-pwidwkbdWyH4HiMs)