FastRPC
from dawn to dusk

AR, Oct'19

Sklik

FastRPC
from dawn to dusk

dusk

chaos

Who am I?

AR

The beginning

It was hopefully warn Tuesday, 19th of July, 2007. Miroslav Talasek at 15:02:55 CET commited the very first code to the newborn project FastRPC

The beginning

Better the very first commit: https://sourceforge.net/p/fastrpc/code/1/tree/

The beginning

Actual the very first commit: 

rsync -av rsync://a.cvs.sourceforge.net/cvsroot/fastrpc/\* \
 fastrpc

Protocol header

Every non-data type represents complex data structure returned by the server or sent by the client. Data always start with magic ("CALL" in hex) and protocol version (major/minor octet pair)

xCA 0x11 versionMajor versionMinor

Client must send Accept header as well:

Accept: application/x-frpc

Protocol header

Every non-data type represents complex data structure returned by the server or sent by the client. Data always start with magic ("CALL" in hex) and protocol version (major/minor octet pair)

xCA 0x11 versionMajor versionMinor

Client must send Accept header as well:

Accept: application/x-frpc

... or this one:

Accept: application/x-base64-frpc

Protocol header

Every non-data type represents complex data structure returned by the server or sent by the client. Data always start with magic ("CALL" in hex) and protocol version (major/minor octet pair)

xCA 0x11 versionMajor versionMinor

Client must send Accept header as well:

Accept: application/x-frpc

... or this one:

Accept: application/x-base64-frpc

... or even this one:

Accept: application/json

Protocol versions

Version 1.0:

Data types: Integer, Double, Boolean, String, Binary, Struct, Array, Datetime
Data size information: 4 octets

Version 2.0:

New data types: Positive/Negative Integer8
Data size information: 8 octets

Version 2.1:

New data types: Null

Protocol versions

Version 3.0:

Never exists

Version 3.1:

Unsigned long long numbers, Datetime remastered?

Maybe something else, but no documentation at all

libfastrpc versions

libfastrpc versions

1.1.1 (27.03.2006) is the very first version you can found in VCS

2.0.2 (01.06.2007) something happened, so major was raised. No changelog, only chaotic commit messages

3.0.0? (14.11.2008) date when probably first v3 was released

3.2.8 (30.03.2011) the last version you can download from SourceForge: https://sourceforge.net/projects/fastrpc/files/fastrpc%20library/3.2.8/

libfastrpc versions - 2

4.0.0 (19.04.2011) something happened and we have v4. No changelog, guys

4.2.0 (30.04.2011) the last version in Subversion

<4.2.1 (21.08.2012) Subversion support dropped, project probably migrated to Github

<4.2.1 (30.04.2011) Changelog file created!

4.2.8 (25.10.2012) The very first tagged version... without changelog description

libfastrpc versions - 3

5.x (06.09.2012 - 30.06.2015!) Unix socket support, multithreading support 

6.x (03.02.2016 - 04.02.2016) X-Forwarded-For support

8.x (02.06.2016 - now) Custom headers support, protocol 3.1... Changelog still looks like a shit

7.x (09.02.2016 - 03.05.2016) Trying to fix what v6 broke

Protocol realizations

  • C++ (Linux, Solaris, Windows)
  • Python (2/3, cpp/vanilla)
  • PHP (4.x only)
  • Java
  • Go
  • Javascript / Typescript
  • Objective-C

More than 40 contributers

Repository search results

Internal GitLab: 41 projects (approx. 15 forks included)

CML: 6 projects

GitHub: approx. 10 projects (and more than 20 projects with same name)

 

Internal Debian: 64 packages (no packages in official repos)

PyPi: 5 packages

Internal PyPi: 12 packages

npm: 1 package

Mavel: 5 packages (same mvnrepository.com and maven.dev)

GoCenter: 1 package

PHP: 1 package

Repository search results

More than 20 internal projects are obsolete or deprecated

Features support

  • headers
  • server pool and fallovers
  • asynchronious
  • transport reimplementation
  • protobuffers
  • extended timeouts
  • (un)marshalling reimplementation
  • https
  • different protocol version implementation
  • static linking

Features support

  • headers
  • server pool and
    allovers
  • asynchronious
  • transport
    reimplementation
  • protobuffers
  • extended timeouts
  • (un)marshalling reimplementation
  • https
  • different protocol version
    implementation
  • static linking

There is no (un)official library which implements all of them

Lack of documentation

You can download libfastrpc v3!

Lack of documentation

Python 2.2 examples included!

Last words to say

We definitely have to stop creating new and new reimplementation

Or, better, completely drop usage of our multifaceted and contradictory library

Reimplementing library.
Nobody uses it.

FastRPC: from dawn to dusk

By Alex Rembish

FastRPC: from dawn to dusk

  • 1,320