Remote Proceadure Calls (RPC) Project

This repository contains the implementation of Remote Proceadure Calls (RPC), a powerful tool for simplifying programming in distributed systems. The aim of this project is to provide non-experts the ability to seamlessly execute functions on a remote server without the need to understand the complexities of networking, scheduling, or management of these tasks.

Objective

  • Understanding the basics of distributed systems
  • Grasping the concept of multiple process interactions
  • Learning the use of pthreads for logical separation of functions
  • Familiarizing with complex network systems and network interaction between client and server

Scope

Through this project, we construct an RPC server that implements a client library, which integrates into a client application. The server handles client library requests while also tracking and executing requested functions for the connected clients. The server is also able to resend results from the most recent Remote Procedure Call (RPC) and ignore requests that are older than the most recent request sequence number, thus ensuring an efficient operation.

A client library that integrates into provided test programs is also implemented. This includes sending specific requests to the RPC server, retrying RPC requests, and ignoring packets that are for other client ids or to old sequence numbers, thereby ensuring a high degree of functionality and reliability of the system.

Usage

This RPC implementation is an integral part of many applications. It increases the development efficiency by abstracting the complexities of networking and distributed systems, thus making it an excellent tool for software engineers who want to maintain focus on the application logic.

In addition, the RPC implementation is designed to be quite robust, with the ability to handle unstable network conditions and also enforce at-most once semantics. Consequently, it is suited to real-world applications where the network conditions may be variable.

to run the tests run the makefile then run the following programs and verify their output with the server running. Make sure to restart the server between runs.

app1
app2a / app2b
app3
app4

Contribute

Consider this project as a learning journey to grasp the knowledge of distributed applications which is highly in demand in the current industry. Feel free to navigate around the code base and its documentation, and contribute with improvements or fixes if you can.

Contact

If you have any questions, feel free to reach out to us.