|
11 hours ago | |
---|---|---|
.github/workflows | 4 weeks ago | |
3rd_party | 1 month ago | |
bldpkg | 2 weeks ago | |
combase | 2 weeks ago | |
examples | 2 weeks ago | |
fuse | 11 hours ago | |
include | 3 weeks ago | |
ipc | 16 hours ago | |
java | 1 week ago | |
pics | 2 weeks ago | |
python | 3 months ago | |
ridl | 5 days ago | |
rpc | 11 hours ago | |
test | 2 weeks ago | |
tools | 3 days ago | |
Concept.md | 2 weeks ago | |
LICENSE | 4 years ago | |
Makefile.am | 1 week ago | |
README.md | 2 weeks ago | |
cfgsel | 5 months ago | |
configure.ac | 3 months ago | |
rpcf.pc.in | 4 months ago |
这是一个嵌入式的RPC实现,关注于跨网络,跨协议,跨平台的互联互通。本项目欢迎有兴趣的人士加入!
This is an asynchronous and event-driven RPC implementation for embeded system with small system footprint. It is targeting at the IOT platforms with high-throughput and high availability over hybrid networks. Welcome to join!
Here
is an introduction to the concept of rpc-frwmrk
.
Synchronous/asynchronous request handling
Active/passive request canceling.
Server-push events
Keep-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 channels
Secure Socket Layer (SSL) support
Websocket support
Object access via Multihop routing
Authentication support with Kerberos 5
Node Redudancy/Load Balance
A skelton generator for CPP, Python and Java
A GUI config tool for rpcrouter
rpcfs - filesystem interface for rpc-frmwrk
(soon)rpc-frmwrk
How to build rpc-frmwrk
for detail description.deb package
or rpm package
to skip the painstaking building process.sudo make install
from the root directory of rpc-frmwrk
source tree.rpc-frwmrk
as described on this page.rpcrouter -r 2
on server side, and on start daemon process rpcrouter -r 1
on client side. And now we are ready to run the helloworld
program. About rpcrouter
, please follow this link.HelloWorld
. Start the hwsvrsmk
, the helloworld
server on server side. And start the hwclismk
on the client side.rpc-frmwrk
supports two approaches for distributed application development.
rpc-frmwrk
has an interface description language
, ridl
to help you to generate the skelton code rapidly. Examples can be found here.rpcfs
. The ridl
compiler can generate a pair of filesystems for server and client respectively with the ridl
file. And all the rpc
traffic goes through file read/write and other file operations. And the system monitoring and management are conducted via file operations, too.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.
MIT krb5 for authentication and access control.
c++11 is required, and make sure the GCC is 5.x or higher.
python 3.5+ is required for Python support.
Java OpenJDK 8 or higher for Java support.
FUSE-3 for rpcfs
[Sat Jun25 2022 01:36:03 PM Beijing
]
loadl
and addsp
to the commands
file. And now the rpcfs
filesystem can aggregrate new service point
dynamically.rpcfs
to the rpcrouter
for monitoring and control purpose.[Sat Jun 18 2022 09:28:10 PM Beijing
]
[Wed Jun 15 2022 10:29:58 AM Beijing
]
rpcfs
testcase.rpcfs
and rpcrouter
, including
serivce point
objectscommands
filerpcfs
for rpcrouter
sysfs
filesystem.[Thu Jun 09 2022 07:19:33 PM Beijing
]
rpcfs
is on the horizon. There are many things to do and I have to take some time to figure out the target to achieve.[Wed May 25 2022 10:28:02 PM Beijing
]
service point
of a mounted file system restartable, and reloadable.[Fri May 13 2022 05:05:33 PM Beijing
]
[Sat May 07 2022 09:21:35 PM Beijing
]
[Tue May 03 2022 12:00:48 PM Beijing
]
[Mon Apr 25 2022 10:33:13 PM Beijing
]
[Thu Apr 14 2022 09:11:27 PM Beijing
]
[Wed Mar 30 2022 10:25:04 PM Beijing
]
[Mon Mar 21 2022 07:57:49 PM Beijing
]
[Mon Feb 28 2022 08:53:32 AM Beijing
]
[Sat Feb 19 2022 11:47:25 PM Beijing
]
Json support
to Fuse Integration
.Fuse Integration
takes two steps, the first is to add fuctions to ridlc
to generate the proxy/server library for FUSE integration, and the second is to implement the file system
part over the generated code. The development is on branch fusesup
.[Tue Jan 25 2022 01:38:47 PM Beijing
]
[Sat Jan 15 2022 07:03:42 PM Beijing
]
[Wed Jan 05 2022 04:20:20 PM Beijing
]
[Sun Jan 02 2022 07:53:48 PM Beijing
]
[Sat Jan 01 2022 11:47:41 AM Beijing
]
[Fri Dec 31 2021 02:39:12 PM Beijing
]
[Tue Dec 14 2021 10:40:41 PM Beijing
]
fuse
support.[Tue Dec 07 2021 10:48:54 PM Beijing
]
sftest
for java is done, the java support is about 95% complete. The last work is to put the Makefile.am in the building process, and get it delivered by the rpm
and deb
packages.[Tue Nov 23 2021 06:21:29 PM Beijing
]
[Tue Nov 09 2021 02:02:13 PM Beijing
]
[Thu Nov 04 2021 09:34:51 PM Beijing
]
[Fri Oct 22 2021 06:18:56 PM Beijing
]
[Sun Oct 03 2021 05:21:45 PM Beijing
]
[Sat Oct 02 2021 08:07:17 PM Beijing
]
[Fri Oct 01 2021 04:29:54 PM Beijing
]
[Thu Sep 30 2021 11:26:55 PM Beijing
]
deb
and rpm
package, but still need some tests.[Mon Sep 20 2021 11:34:52 PM Beijing
]
[Thu Sep 02 2021 02:54:14 PM Beiging
]
rpc-frmwrk
.[Tue Aug 31 2021 13:32:00 AM Beijing
]
[Sat Aug 28 2021 10:44:47 AM Beijing
]
[Fri Aug 06 2021 10:05:20 AM Beijing
]
[Mon Jul 31 2021 10:23:00 AM Beijing
]
rfcdev
to the master branch.rfcdev
. It is not perfect yet, since rfc
is now just a concurrency limiter, to be a complete flow controller, we still need some work on traffics of each individual connection. But at this moment, let's leave this issue behind till it cannot be ignored.[Mon Jul 26 2021 08:20:46 PM Beijing
]
reqfwdr
as the solution of the starving issue. After having fixed some stable issues, and some old bugs, the starving issue is now eliminated from the reqfwdr
.RFC
last so long.[Mon Jul 12 2021 01:54:27 PM Beijing
]
reqfwdr
when a hundred requests arrive at the same time. However, the starving issue could also be an issue of the bridge
. And I need to address it ASAP before the rfc
can be released.[Mon Jul 05 2021 04:42:26 PM Beijing
]
rfcdev
branch. Since rfc
is a profound changes, it has exposed some old design issues, and stability issues. Although we have fixed some issues, it still need some more tests.rfc
still remains one last bit to make it perfect, that is, the algothrim to adaptively and automaticaly adjust the sending window size with the feedback of current load and latency informantion.[Mon Jun 21 2021 03:14:14 PM Beijing
]
RFC
is still under testing. Added a stress test to the rfcdev
branch.[Sun Jun 13 2021 11:49:07 PM Beijing
]
request flow control
code complete. Now entering debugging stage. It should be ready next week.[Sat Jun 05 2021 03:40:07 PM Beijing
]
request flow control
has expanded a lot, including some critical update in multihop
. I have created another branch for the development.[Thu May 27 2021 05:42:27 PM Beijing
]
request based flow control
. The other half is the flow control logics in request forwarder
and per-client connection besides the existing aggregrated connection.[Fri May 21 2021 02:31:46 PM Beijing
]
CBuffer
, just exposed.active disconnection
on server side if the handshake check fails.request based flow control
involves a mainloop pool
to distribute the io loads, retiring long-wait requests, task scheduling restrictions in CIfParallelTaskGrp
, and concurrent request limit update
event.[Mon May 10 2021 09:24:59 PM Beijing
]
request-based flow control
.[Fri May 07 2021 04:12:30 PM Beijing
]
rpc-frmwrk
with ease![Sun Apr 25 2021 03:07:27 PM Beijing
]
rpc-frmwrk
and start the development of your hello, world
application in C++. That will be the first official release of rpc-frwmrk
.[Mon Apr 19 2021 02:14:36 PM Beijing
]
Ubuntu
is a nightmare, and the filesystem is so fragile to sustain a single unexpected shutdown or system crash. Switched to Fedora-33
for luck.[Thu Apr 15 2021 10:00:02 PM Beijing
]
rpc-frmwrk
's first code generator for C++ is ready now! Congratulations![Thu Apr 15 2021 12:56:10 PM Beijing
]
[Tue Apr 13 2021 05:29:19 PM Beijing
]
[Mon Apr 12 2021 09:15:36 PM Beijing
]
keep-alive
improvement and no-reply
request are ready now.router.json
, rtauth.json
, and authprxy.json
need to be customized for the generated project. And an make install
target is needed to ease the deployment efforts or provide hints for deployment. It requires some new statements in the ridl
gramma.[Thu Apr 08 2021 08:37:46 PM Beijing
]
keep-alive
support perfect. it should be a quite easy task.[Tue Mar 30 2021 01:28:58 PM Beijing
]
rpcf
in source code, to end the naming related chaos. It is also a preparation for building the auto-generated project by ridlc.[Thu Mar 25 2021 11:26:39 PM Beijing
]
[Sat Mar 13 2021 09:25:15 PM Beijing
]
[Sun Jan 31 2021 11:52:16 AM Beijing
]
Node Redudancy/Load Balance
. It is a very simple implementation. Load distribution on more advanced strategy relies on more advanced data acquisiton technique, which needs some further development in the future.[Sat Jan 23 2021 06:58:41 PM Beijing
]
sftest
is almost done. I will add some document text and do some further test.sftest
is done, the major development target of Python support has been achieved. As the todo
list shows, I will do some investigation on the code generator and probably the next step is to add some support about protobuf, to enable multi-languate support, or JAVA support.[Sun Jan 17 2021 12:41:10 PM Beijing
]
[Fri Jan 08 2021 10:17:44 AM Beijing
]
server.sip
and PyRpcServer
from proxy.sip
and PyRpcProxy
.sftest
will be added after the python server support is completed.[Sun Dec 19 2020 12:06:37 AM Beijing
]
sending Progress
when the remote peer has sent out enough messages to fill up the local receiving window. And instead, sending tokProgress
is performed from CStreamSyncBase
's CIfReadWriteStmTask
, at the very moment the associated pending message is out queue and consumed. This approach prevents the potential stall of stream due to receiving window congestion.[Fri Dec 4 2020 10:54:37 PM Beijing
]
sftest
turns to to be faster than old version with the new streaming interface. The reason is yet to check. Sweet.[Fri Nov 27 2020 04:56:52 PM Beijing
]
[Fri 27 Nov 2020 10:05:19 AM Beijing
]
[Sat 14 Nov 2020 01:49:44 PM Beijing
]
[Thu 22 Oct 2020 10:41:46 AM Beijing
]
make install
is deferred, because it is not quite necessary at present.tutorial
directory and write some tutorial document.[Sat 10 Oct 2020 02:48:54 PM Beijing
]
rpc-frmwrk
should work stably.make install
to the build system.[Wed 23 Sep 2020 12:24:43 PM Beijing
]
make install
[Tue 15 Sep 2020 11:37:29 AM Beijing
]
[Fri 11 Sep 2020 08:25:18 PM Beijing
]
[Wed 02 Sep 2020 07:30:53 PM Beijing
]
sftest
has passed. There are still some test cases to go. Kerberos support is almost ready.[Tue 25 Aug 2020 08:19:12 PM Beijing
]
kinit
now works with rpc-frmwrk through the rpc connection, that is, if the kerberos kdc is behind the firewall, and not open to the internet, the client still has a way to get authenticated.[Tue 11 Aug 2020 10:02:46 PM Beijing
]
iftest
has passed. There should still be some bugs. Bug fixing and tests continues...[Thu 06 Aug 2020 11:02:28 PM Beijing
]
[Sun 26 Jul 2020 08:12:16 PM Beijing
]
[Sun 12 Jul 2020 11:23:27 AM Beijing
]
[Mon 22 Jun 2020 05:40:08 PM Beijing
]
Kerberos
authentication.[Fri 12 Jun 2020 04:58:06 PM Beijing
]
[Sun 24 May 2020 04:49:09 PM Beijing
]
[Wed 13 May 2020 05:23:01 PM Beijing
]
File ACL
as the access control
model.Kerberos
requires a lot of resources for deployment, and I will also try to add the NTLM
as a low-cost alternative.[Mon 11 May 2020 09:23:20 PM Beijing
]
GSSAPI's Kerberos implementation
as the authentication mechanism. There are still some technical issues to investigate at this point.File ACL
or RBAC
as the access control
model.[Tue 28 Apr 2020 02:12:02 PM Beijing
]
Authentication and access control
for rpc-frmwrk
.[Sun 26 Apr 2020 06:19:24 PM Beijing
]
Multihop
is almost completed, but testing will continue to cover more test cases.Python support
or Authentication and access control
. Not decided yet.[Fri 24 Apr 2020 08:15:48 PM Beijing
]
[Tue 07 Apr 2020 11:15:32 AM Beijing
]
[Fri 03 Apr 2020 10:03:06 PM Beijing
]
[Tue 31 Mar 2020 10:11:09 PM Beijing
]
[Sat 21 Mar 2020 01:47:35 PM Beijing
]
autoconf
releated stuffs to make the cross-compile more efficient.[Fri 20 Mar 2020 11:00:16 PM Beijing
]
[Sat 14 Mar 2020 09:18:01 PM Beijing
]
[Mon 02 Mar 2020 05:36:15 PM Beijing
]
CRpcRouter
to smaller classes.[Sun 23 Feb 2020 11:22:40 AM Beijing
]
[Sat 15 Feb 2020 12:02:14 AM Beijing
]
Concept.md
as an introduction about the rpc-frmwrk
.[Wed 12 Feb 2020 02:09:38 PM Beijing
]
WebSocket
support is completed. And the instructions about the usage is updated in the Readme.md
.multihop
support, the very important feature![Mon 10 Feb 2020 02:14:10 PM Beijing
]
Websocket
support is comming. The new update delivers a working version of Websocket
port. However, the transparent proxy traversal
remains to test.[Fri 07 Feb 2020 07:31:31 PM Beijing
]
multihop
branch to master
.WebSocket
support, though not working yet.WebSocket
is done, I will then choose one to implement between multihop
and connection recovery
.[Sun 02 Feb 2020 08:30:52 PM Beijing
]
multihop
for the newly added changes. It will take some time to get stable, and then I will merge back to the master
branch.[Tue 21 Jan 2020 06:53:13 PM Beijing
]
ip address
with connection handle
has turned out not a trivial change, and has escalated to a major change. I need to bring the pirority of multihop routing
ahead of the websocket
support for now. This is a major upgrade of the router module, which enables associations of two or more devices/controlers in a hierarchical tree, and enable the client to RPC
to a number of remote servers via a path
string.[Mon 06 Jan 2020 12:04:26 PM Beijing
]
ip address
with a opaque connection handle
for the upcoming support of websocket, since ip address
is no longer the only address format to locate the server. It is the bottom half of an earlier change which replaced ip address
with the port id
on the bridge
side. The reqfwdr
and dbusprxy
are the target modules for this time.[Wed 01 Jan 2020 09:05:21 AM Beijing
]
[Mon 30 Dec 2019 12:57:19 PM Beijing
]
[Sat 28 Dec 2019 04:11:29 PM Beijing
]
sslfido
are fixed, and it should be safe to say the SSL support is more stable than yesterday. :)[Fri 27 Dec 2019 08:51:54 PM Beijing
]
irp completion thread
and the other is because the newly added CTcpStreamPdo2
with incompitable interface to the old CTcpStreamPdo
. It seems to take a longer time to make the new tcp port stack
stable.[Thu 26 Dec 2019 08:17:28 PM Beijing
]
[Fri 20 Dec 2019 10:29:02 PM Beijing
]
sslfido
, related to the renegotiation. And there are some optimization and enhancement to do. But it does not matter that we can move on the add the support for websocket.[Wed 18 Dec 2019 11:08:13 AM Beijing
]
mac failed
, was confusing and misleading for bug fixing. And most of the time was taken to find out why OpenSSL cannot work multi-threaded, in vain.[Fri 13 Dec 2019 07:47:35 PM Beijing
]
[Wed 11 Dec 2019 09:48:08 AM Beijing
]
[Sat 30 Nov 2019 02:33:06 PM Beijing
]
[Mon 25 Nov 2019 03:58:57 PM Beijing
]
rpcrouter
now accepts command line option -c
to enable compression on the outbound packets from the CRpcNativeProtoFdo port.[Sat 23 Nov 2019 01:38:46 PM Beijing
]
tcp port stack
in place. Both the old tcp port stack
and the new stack can be useful in different use cases. And therefore let's keep both alive for a period.[Sat 09 Nov 2019 10:09:12 AM Beijing
]
[Sun 03 Nov 2019 02:05:39 PM Beijing
]
[Fri 01 Nov 2019 04:47:07 PM Beijing
]
[Thu 31 Oct 2019 07:36:50 PM Beijing
]
[Thu 24 Oct 2019 10:31:14 AM Beijing
]
[Mon 21 Oct 2019 05:34:24 PM Beijing
]
[Thu 17 Oct 2019 07:36:03 PM Beijing
]
helloworld
with built-in router as the btinrt
test, for the curiosity to know the performance of removal of dbus traffic. The outcome shows improvement of the latency from about 1.5ms to about 1ms per echo, as about 30% faster, in sacrifice of the flexibility. Anyway, well worth the effort. Also fixed a hanging bug in router and a segment fault in taskgroup which cannot reproduce in the stand-alone router setup.[Wed 09 Oct 2019 09:11:53 AM Beijing
]
[Mon 30 Sep 2019 02:53:58 PM Beijing
]
sftest
and stmtest
tests with the stream interface. And fixed many bugs.websocket
connection.[Tue 17 Sep 2019 09:56:09 PM Beijing
]
[Wed 11 Sep 2019 07:16:37 PM Beijing
]
[Sun 01 Sep 2019 09:11:20 AM Beijing
]
[Wed 21 Aug 2019 10:21:16 AM Beijing
]
[Wed 21 Aug 2019 08:13:14 AM Beijing
]
[Fri 16 Aug 2019 09:04:06 PM Beijing
]
[Sun 11 Aug 2019 07:11:55 PM Beijing
]
[Wed 07 Aug 2019 09:48:22 PM Beijing
]
[Fri 02 Aug 2019 01:25:29 PM Beijing
]
[Sat 27 Jul 2019 09:36:00 PM Beijing
]
[Sun 21 Jul 2019 02:25:01 PM Beijing
]
[Sat 20 Jul 2019 01:50:34 PM Beijing
]
[Mon 15 Jul 2019 06:02:27 PM Beijing
]
[Wed 10 Jul 2019 04:02:20 PM Beijing
]
[Sat 22 Jun 2019 02:03:53 PM Beijing
]
flow control
for the streaming support. It turns out to be more complicated than expected. Just swaying between a simple solution and a complex one.[Thu 13 Jun 2019 06:53:01 AM Beijing
]
[Mon 03 Jun 2019 02:24:31 PM Beijing
]
SEND/FETCH DATA
does not work for TCP
connection. I need to tear it apart and rewrite it. The issues are:SEND_DATA
. That is the server cannot filter the request before all the data has already uploaded to the server.SEND_DATA
and FETCH_DATA
are difficult to cancel if the request is still on the way to the server, which is likely to happen over a slow connection.KEEP_ALIVE
and OnNotify
becomes complicated.SEND_DATA/FETCH_DATA
, so that both the server and the proxy can control the traffic all the time.[Sat 01 Jun 2019 05:48:48 PM Beijing
]
[Mon 27 May 2019 08:13:24 PM Beijing
]
Event broadcasting
, KEEP-ALIVE
, Pause-resume
, Active-canceling
, and Async call
are working now over both IRC and RPC, as well as helloworld
.[Sun May 12 14:03:47 Beijing 2019
]
communication channel setup
(EnableRemoteEvent
) is almost OK for tcp connection. There should still be a few hidden
bugs to fix in the future testing. Anyway the helloworld
can now work more stable and faster. And both the bridge
and forwarder
are more torlerable on the error condtion.File/Big data transfer
work. It should be the last big section of un-debugged part so far.[Fri May 03 13:15:23 Beijing 2019
]
helloworld
can work over the tcp connection. Great![Wed Apr 24 18:10:46 Beijing 2019
]
bridge
side is now in good shape. Next I will take some time to clear some bugs on the forwarder
side, before moving on to run the helloworld over the tcp connection.[Sun Apr 21 12:36:37 Beijing 2019
]
EnableRemoteEvent
and move on to debugging client requests.[Thu Apr 11 14:06:43 Beijing 2019
]
[Wed Mar 27 17:56:33 Beijing 2019
]
EnableRemoteEvent
and connection setup.[Thu Mar 14 20:47:45 Beijing 2019
]
EnableRemoteEvent
works on the Forwarder
side. and The bridge side has successfully received the request. Move on to get the Bridge
side EnableRemoteEvent
to work. This should be the last part work before getting through the whole request/response path.[Thu Mar 07 23:35:20 Beijing 2019
]
[Tue Mar 05 14:05:40 Beijing 2019
]
CRpcRouter
. There are still some memory leaks to fix. One known bug is that, the OpenRemotePort
and CloseRemotePort
need to be sequentially executed rather than in random order. Otherwise, the CRpcTcpBridgeProxyImpl
and the CTcpStreamPdo
may not be able to be released properly.EnableRemoteEvent
to work.[Sun Feb 24 14:52:28 Beijing 2019
]
[Sat Feb 16 17:35:54 Beijing 2019
]
OpenRemotePort
is done now. The CDBusProxyPdo and CDBusProxyFdo are found lack of the online/offline
handler for both remote server and remote module, and need to add some code next week. And after that, we can move on to debug EnableEvent
related stuffs.[Thu Feb 07 21:17:48 Beijing 2019
]
OpenRemotePort
is almost completed now. And there still need a disconnection handler on the reqfwdr
side to clean up the context for the unexpectedly disconnected proxy.[Thu Jan 24 17:03:14 Beijing 2019
]
[Sat Jan 19 23:43:28 Beijing 2019
]
[Fri Jan 11 08:32:13 Beijing 2019
]
[Tue Jan 01 20:53:12 Beijing 2019
]
helloworld
, please use the earlier version bf852d55ae2342c5f01cc499c59885f50780c550
of echodesc.json
instead. The latest version is modified for RPC debugging purpose.[Tue Dec 18 21:35:54 Beijing 2018
]
[Fri Dec 7 22:45:23 Beijing 2018
]
[Mon Dec 03 17:47:55 Beijing 2018
]
[Tue Nov 20 13:02:20 BeijingBeijing 2018
]
[Wed Nov 14 11:24:42 Beijing 2018
]
Send/Fetch
is done. And now it is time to move on to the RPC module. For security purpose, I will add the authentication interface sometime after the RPC module is done.[Fri Nov 2 18:24:51 Beijing 2018
]
keep-alive
and Pause/Resume
works.Send/Fetch file
to work, before I can move on to RPC module.[ Tue Oct 23 19:59:39 Beijing 2018
]
[ Mon Oct 15 18:51:48 Beijing 2018
]
g_main_loop
from glib-2.0
is replaced with a simplified mainloop
.[ Thu Oct 4 12:24:00 Beijing 2018
]
libev
in the concurrent environment flawlessly.
So libev
is not an option any more. (Reason)poll
to fix it.