Assignment: Implement and Test a Key-Value Store Server and Client DUE DATE :- 20 Jan 2025
Objective: Develop and test a simple in-memory key-value store server and client application using
Python's gevent library for handling concurrency and network communication.
Requirements:
1. Understanding the Components:
Study the provided Server and Client classes, and the ProtocolHandler
that manages the communication protocol.
The server should handle multiple concurrent clients using gevent's asynchronous
capabilities.
2. Setup Environment:
Install Python and necessary packages (gevent).
Ensure the system is configured to support multiple simultaneous network
connections.
3. Implement Server:
The server should be able to accept commands like GET, SET, DELETE, FLUSH,
MGET, and MSET to manipulate the in-memory dictionary.
Understand the handling of different data types and responses based on the custom
protocol (simple strings, errors, integers, bulk strings, arrays, and dictionaries).
4. Implement Client:
The client should connect to the server and be able to send requests and receive
responses.
Implement functionalities to send specific commands to the server and display
responses.
5. Testing:
Test the server and client interaction by running multiple client instances and
performing various operations.
Verify the server's concurrency handling by executing simultaneous commands from
different clients.
6. Enhancements (Optional):
Add error handling and improve resilience against invalid input or unexpected
disconnections.
Enhance the protocol to support more complex data structures or operations if
needed.
7. Documentation:
Document the code clearly, explaining the purpose and function of each part of the
protocol handler, server, and client.
Write a user guide on how to run the server and client, including how to use the
REPL interface in the client for interacting with the server.
Deliverables:
Source code for the server and client.
A detailed report documenting the implementation, challenges faced, and testing procedures.
A user manual for running and interacting with the key-value store system.
This assignment is intended to provide practical experience with network programming,
asynchronous I/O operations using gevent, and the implementation of application-level protocols.