https://github.com/mahdi-eth/real-time-chat-app
A real-time chat application built with Go, WebSockets, and Redis. This project demonstrates how to implement a scalable chat system with real-time messaging capabilities and chat history management. The application features a WebSocket service for real-time communication and a history storage service that manages chat history efficiently.
https://github.com/mahdi-eth/real-time-chat-app
docker go golang real-time redis socket websockets
Last synced: 3 months ago
JSON representation
A real-time chat application built with Go, WebSockets, and Redis. This project demonstrates how to implement a scalable chat system with real-time messaging capabilities and chat history management. The application features a WebSocket service for real-time communication and a history storage service that manages chat history efficiently.
- Host: GitHub
- URL: https://github.com/mahdi-eth/real-time-chat-app
- Owner: mahdi-eth
- License: mit
- Created: 2024-08-25T06:49:41.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2024-08-25T06:56:14.000Z (10 months ago)
- Last Synced: 2025-04-15T21:45:04.872Z (3 months ago)
- Topics: docker, go, golang, real-time, redis, socket, websockets
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 21
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- Changelog: history-storage-service/.env
- License: LICENSE
Awesome Lists containing this project
README
# Real-Time Chat Application
Welcome to the **Real-Time Chat Application**! This project showcases a real-time chat system implemented using Go, WebSockets, and Redis. It is designed to demonstrate scalable and efficient real-time messaging and chat history management.
## Overview
This application consists of three main components:
1. **WebSocket Service**: Handles real-time messaging between users. It also fetches chat history when a new user joins.
2. **History Storage Service**: Stores chat messages in Redis and provides an endpoint to fetch chat history.
3. **Redis**: Acts as a message broker and storage backend for chat messages.## Features
- **Real-Time Messaging**: Enables instant communication between users using WebSockets.
- **Chat History Management**: Stores and retrieves chat messages in chronological order.
- **Dockerized Services**: Each component runs in its own Docker container for easy deployment and scalability.## Architecture
1. **WebSocket Service**:
- Handles WebSocket connections.
- Publishes new messages to the Redis `chat_channel`.
- Fetches chat history from the History Storage Service and sends it to clients on connection.2. **History Storage Service**:
- Subscribes to Redis `chat_channel`.
- Saves incoming messages to the `chat_history` list in Redis.
- Provides an HTTP endpoint to fetch chat history.3. **Redis**:
- Acts as a message broker with Pub/Sub functionality.
- Stores chat history with no expiration.## Getting Started
### Prerequisites
- Docker and Docker Compose installed on your machine.
- Basic understanding of Go, WebSockets, and Redis.### Setup
1. **Clone the Repository**:
```bash
git clone https://github.com/mahdi-eth/real-time-chat-app.git
cd real-time-chat-app
```2. **Build and Start Services**:
```bash
docker-compose up --build
```
This command will build Docker images for the WebSocket and History Storage services, and start all services defined in the docker-compose.yml file.3. **Testing the Application**:
- Open your WebSocket client (such as WebSocket King Client or postman) and connect to ws://localhost:8080/ws.- Send messages and see real-time communication in action.
- New connections will receive chat history automatically.
Thank you for checking out the Real-Time Chat Application. We hope you find it useful and informative!
Happy coding!