RSocket is a binary, reactive, message-driven protocol designed for efficient, bidirectional communication between networked applications especially microservices and streaming systems.

RSocket was created (by Netflix, Facebook, and others) to provide a reactive-streams–compliant transport that fixes those issues.

RSocket = Reactive Streams + Framing Protocol

It’s built on top of the Reactive Streams specification, which defines how to handle asynchronous data streams with backpressure.

Core idea:

Instead of “send and forget,” communication is modeled as a stream that can be:

  • Requested (request(n)),
  • Canceled,
  • Or flowed in both directions.

So both peers are symmetrical each can be a client or a server at any moment.

Frame-Based Protocol (Binary Layer)

RSocket is binary and frame-oriented, not text-based like HTTP.
Each message (frame) contains:

FieldMeaning
Stream IDWhich logical stream this message belongs to
Frame TypeREQUEST_RESPONSE, PAYLOAD, KEEPALIVE, etc.
FlagsMetadata, completion, next frame indicators
PayloadData + optional metadata

Because of framing, multiple logical streams can share one TCP or WebSocket connection.

FeatureMeaning
Reactive StreamsEvery data exchange is a stream; the receiver explicitly controls how many items to receive.
Frame-basedCommunication is broken into binary frames (messages) tagged with stream IDs.
MultiplexedMany logical streams share one TCP or WebSocket connection.
Transport-agnosticCan run on TCP, WebSocket, HTTP/2, Aeron, etc.
SymmetricBoth sides can initiate requests — no strict “client/server.”