RPC is a way of connecting two separate services via a raw TCP socket
Note: SOAP, Thrift, REST APIs, message queues such as RabbitMQ, and key value stores such as Etcd are examples of other tools and protocols
The fundamental principle is, you define an RPC service:
- Write a function
- Add some RPC configuration
- Register our function as a RPC service
- Start the service and have it listen for messages on a specific port
From here we have a client service that calls the RPC service:
- Write code which calls RPC function
- Call the function via a specific ip/port
- The 'message' is passed over as valid JSON
The client JSON could look like:
method
: name of method/serviceparams
: Array of arguments to be passedid
: usually an integer; makes it easier for client to know which request it got a response to (if the RPC calls are done asynchroneously)
{"method": "Arith.Multiply", "params": [{"A": 2, "B": 3}], "id": 1}
The RPC server JSON response could look like:
result
: contains return value of method called (null
if error ocurred)error
: if error occurred, indicates error code or error message, otherwisenull
id
: the id of the request it is responding to
{"result": 6, "error": null, "id": 1}
Here is a basic implementation: https://gist.github.com/Integralist/53f6dc643fd0227c6606#rpc