# RSocket
[](https://gitter.im/ReactiveSocket/reactivesocket-java)
RSocket is a binary protocol for use on byte stream transports such as TCP, WebSockets, and Aeron.
It enables the following symmetric interaction models via async message passing over a single connection:
- request/response (stream of 1)
- request/stream (finite stream of many)
- fire-and-forget (no response)
- event subscription (infinite stream of many)
Learn more at http://rsocket.io
## Build and Binaries
[](https://travis-ci.org/rsocket/rsocket-java)
Releases are available via Maven Central.
Example:
```groovy
dependencies {
implementation 'io.rsocket:rsocket-core:0.11.14'
implementation 'io.rsocket:rsocket-transport-netty:0.11.14'
// implementation 'io.rsocket:rsocket-core:0.11.15.BUILD-SNAPSHOT'
// implementation 'io.rsocket:rsocket-transport-netty:0.11.15.BUILD-SNAPSHOT'
}
```
## Development
Install the google-java-format in Intellij, from Plugins preferences.
Enable under Preferences -> Other Settings -> google-java-format Settings
Format automatically with
```
$./gradlew goJF
```
## Debugging
Frames can be printed out to help debugging. Set the logger `io.rsocket.FrameLogger` to debug to print the frames.
## Requirements
- Java 8 - heavy dependence on Java 8 functional APIs and java.time, also on Reactor
- Android O - https://github.com/rsocket/rsocket-demo-android-java8
## Trivial Client
```
package io.rsocket.transport.netty;
import io.rsocket.Payload;
import io.rsocket.RSocket;
import io.rsocket.RSocketFactory;
import io.rsocket.transport.netty.client.WebsocketClientTransport;
import io.rsocket.util.DefaultPayload;
import reactor.core.publisher.Flux;
import java.net.URI;
public class ExampleClient {
public static void main(String[] args) {
WebsocketClientTransport ws = WebsocketClientTransport.create(URI.create("ws://rsocket-demo.herokuapp.com/ws"));
RSocket client = RSocketFactory.connect().keepAlive().transport(ws).start().block();
try {
Flux