## Introduction

### What is RCF?

RCF (Remote Call Framework) is a cross-platform interprocess communication framework for C++.

Unlike other communication frameworks, RCF doesn't use a separate IDL (Interface Definition Language). RCF interfaces are defined directly in C++, and serialization for user-defined data types likewise is implemented in C++. Instead of a separate IDL compiler tool, RCF uses the C++ compiler to generate client and server stubs.

RCF provides a broad range of interprocess communication features:

- Oneway and twoway messaging.
- Batched oneway messaging.
- Publish/subscribe style messaging.
- Multicast and broadcast messaging over UDP.
- Asynchronous remote calls.
- Server-to-client callback connections.
- Multiple transports (TCP, UDP, Windows named pipes and UNIX local domain sockets).
- Tunneling over HTTP and HTTPS.
- Compression (zlib) and encryption (Kerberos, NTLM, Schannel, and OpenSSL).
- Supports IPv6.
- Built in serialization framework.
- Built in file transfer capabilities.
- Robust versioning support.
- Support for Boost.Serialization.
- Support for Protocol Buffers.
- Support for JSON-RPC.
- Portability across a wide range of compilers, platforms and operating systems.
- Scalability acoss a wide range of applications, from simple parent-child IPC, right up to large scale distributed systems.
- Efficiency, with zero-copy, zero-heap allocation on critical paths, on both server and client.
- No dependencies, apart from Boost header files (1.35.0 or later). zlib and OpenSSL are optional.

To start learning about programming with RCF, go straight to the Tutorial.

### Why should I use RCF?

You should consider using RCF if you are writing C++ components that need some form of interprocess communication. For communication between native C++ components, there is little benefit in using XML and XML schemas to describe messages, as native serialization formats are more descriptive and efficient. There are also few benefits to separately compiled IDL files. RCF's approach of describing interfaces in C++ code makes for a simpler build and more flexible development.

RCF is written in 100% standard C++, and is both portable and efficient. Basing your communication layer on RCF gives you portability across a wide range of compilers, operating systems, and platforms, and the ability to pick and choose from a wide range of transport mechanisms, threading models, and messaging paradigms.

RCF has been designed as a real world tool for real world applications. RCF has been in large-scale commercial use since 2006, and today powers networked applications around the world. Some of the scenarios RCF has been used in include:

- Client-server systems, across LAN's or WAN's. From industrial process control, to replacing DCOM in distributed desktop applications, to cross platform communication.
- Back end server components, typically in a homogeneous LAN environment.
- Communication between Windows services and their monitoring applications.
- Parent-child process communication.
- Generic local IPC, replacing COM.