This project implements a distributed group chat application where users can create and delete rooms, post messages within rooms they are participating in, and receive messages in causal order. The application is designed to be fully distributed, meaning it operates without a centralized server, and highly available, ensuring users can use the chat even when temporarily disconnected from the network or during network failures. For the sake of simplicity, since this wasn't the aim of the project, we opted for a multicast connection between clients.
- Room Creation and Deletion: Users can create rooms and specify the set of participants at the time of creation. Rooms can also be deleted by users.
- Messaging: Users can post new messages within rooms they are participating in. Messages within each room are delivered in causal order.
- Distributed Architecture: The application operates in a fully distributed manner, without relying on any centralized server. Users exchange messages directly with each other.
- High Availability: The application allows users to continue using the chat even during temporary network disconnections or failures.
- Creating a Room: Users can create a room and specify the participants by providing their usernames.
/create [room_name] [participant1] [participant2] ...
- Deleting a Room: Room creators can delete a room they created.
/delete [room_name]
- Sending Messages: Users can send messages to rooms they are participating in.
/send [room_name] [message_content]
- Clients are reliable but can join and leave the network at any time.
- Network failures and partitions may occur, but the application should continue to operate effectively.
- Falcone Federico
- Giovanni M. Codemo
- Distributed Systems course at Politecnico di Milano