This is an asynchronous and event-driven RPC implementation for embeded system with small system footprint. It is targeting at both IOT platforms and mainstream servers with high-throughput and high availability. It features highly easy to use with a versatile skeleton generator, to generate C++, Python, Java or JavaScript skeleton code instantly. Welcome to use!
Here is an introduction to the concept of rpc-frwmrk.
Synchronous/asynchronous request handlingActive/passive request canceling.Server-push eventsKeep-alive for time-consuming request.Simultaneous object access over network and IPC.Peer online/offline awareness.Publishing multiple local/remote object services via single network port.Full-duplex streaming channelsBoth OpenSSL and GmSSL supportWebsocket supportObject access via Multihop routingAuthentication support for Kerberos, OAuth2 and SimpAuth(password)Node Redudancy/Load BalanceA collection of skeleton generators for C++, Python Java, and JavaScriptA GUI config tool for rpcrouterrpcfs - filesystem interface for rpc-frmwrk
- Please refer to this article
How to build rpc-frmwrkfor detail description. - If you are using Ubuntu or Fedora, you may want to install the
deb package or rpm packageto skip the painstaking building process.
- Run
sudo make installfrom the root directory ofrpc-frmwrksource tree. - Configure the runtime parameters for
rpc-frwmrkas described on this page. - Start the daemon process
rpcrouter -dr 2on server side, and on start daemon processrpcrouter -dr 1on client side. And now we are ready to run thehelloworldprogram. For more information aboutrpcrouter, please follow this link. - Smoketest with
HelloWorld. Start thehwsvrsmk, thehelloworldserver on server side. And start thehwclismkon the client side. - This wiki has some detail information.
rpc-frmwrk can generate skeleton systems for different system architectures.
- The micro-service RPC.
rpc-frmwrkhas aninterface description language,ridlto help you to generate the skeleton code in one second. Examples can be found here. The advantage is that you can deploy new services on the fly, as well as shutting down some of them. - The single-app RPC.
ridlccan also generate skeleton code in the form of the classic client/server program. The advantage is it has much better performance. - Programming with
rpcfs. Theridlccan generate a pair of filesystems for server and client respectively with theridlfile. And all therpctraffic goes through file read/write and other file operations. And moreoverrpcfshosted by therpcrouterprovides information for runtime monitoring and management.
The configuration tool rpcfg.py for rpc-frmwrk can automatically generate installation packages for the target machine. The installation package can install the runtime libraries of rpc-frmwrk and perform system configuration. The configuration includes setting the runtime parameters for rpc-frmwrk, configuring the Apache or Nginx web server, distributing SSL keys, and, when authentication is enabled, configuring the Kerberos server. For more details about the installation package, please refer to the user guide for rpcfg.py.
rpc-frmwrk provides a web-based monitoring program, which allows you to easily monitor rpc-frmwrk servers and configure runtime parameters from various platforms. The monitoring program features access control, so different users can access different content. Access control can be easily customized from the backend. The monitoring system can enable logging for specific setpoints at the backend, providing more detailed historical data for analysis and optimization. For information on setting up the monitoring functionality, please refer to this article.
This project depends on the following 3rd-party packags at runtime:
dbus-1.0 (dbus-devel)libjson-cpp (jsoncpp-devel)lz4 (lz4-devel)cppunit-1 (for the test cases, cppunit and cppunit-devel)openssl-1.1 for SSL communication.(optional)MIT krb5 for authentication and access control.(optional)c++11 is required, and make sure the GCC is 5.x or higher.python 3.5+ is required for Python support.(optional)Java OpenJDK 8 or higher for Java support.(optional)npm 9.0 and webpack(optional)FUSE-3 for rpcfs support(optional)GmSSL 3.0(optional)