RSocket es un protocolo binario para uso en transportes de flujo de bytes como TCP, WebSockets y Aeron.
Permite los siguientes modelos de interacción simétrica a través de mensajes asíncronos que pasan a través de una única conexión:
Obtenga más información en http://rsocket.io
master
ahora está dedicada al desarrollo de la línea 1.2.x
Los lanzamientos y los hitos están disponibles a través de Maven Central.
Ejemplo:
repositories {
mavenCentral()
maven { url ' https://repo.spring.io/milestone ' } // Reactor milestones (if needed)
}
dependencies {
implementation ' io.rsocket:rsocket-core:1.2.0-SNAPSHOT '
implementation ' io.rsocket:rsocket-transport-netty:1.2.0-SNAPSHOT '
}
Las instantáneas están disponibles a través de oss.jfrog.org (OJO).
Ejemplo:
repositories {
maven { url ' https://maven.pkg.github.com/rsocket/rsocket-java ' }
maven { url ' https://repo.spring.io/snapshot ' } // Reactor snapshots (if needed)
}
dependencies {
implementation ' io.rsocket:rsocket-core:1.2.0-SNAPSHOT '
implementation ' io.rsocket:rsocket-transport-netty:1.2.0-SNAPSHOT '
}
Instale el formato google-java en Intellij, desde las preferencias de Complementos. Habilítelo en Preferencias -> Otras configuraciones -> Configuración de formato google-java
Formatear automáticamente con
$./gradlew goJF
Los fotogramas se pueden imprimir para ayudar a la depuración. Configure el registrador io.rsocket.FrameLogger
para que depure e imprima los fotogramas.
package io . rsocket . transport . netty ;
import io . rsocket . Payload ;
import io . rsocket . RSocket ;
import io . rsocket . core . RSocketConnector ;
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 clientRSocket = RSocketConnector . connectWith ( ws ). block ();
try {
Flux < Payload > s = clientRSocket . requestStream ( DefaultPayload . create ( "peace" ));
s . take ( 10 ). doOnNext ( p -> System . out . println ( p . getDataUtf8 ())). blockLast ();
} finally {
clientRSocket . dispose ();
}
}
}
De forma predeterminada, para que RSocket sea más fácil de usar, copia la carga útil entrante. Copiar la carga útil tiene un costo para el rendimiento y la latencia. Si desea utilizar copia cero, debe desactivar esto. Para deshabilitar la copia, debe incluir un argumento payloadDecoder
en su RSocketFactory
. Esto le permitirá administrar la carga útil sin copiar los datos del transporte subyacente. Debes liberar la carga útil cuando hayas terminado con ellos o sufrirás una pérdida de memoria. Si se usa correctamente, esto reducirá la latencia y aumentará el rendimiento.
RSocketServer . create ( new PingHandler ())
// Enable Zero Copy
. payloadDecoder ( PayloadDecoder . ZERO_COPY )
. bind ( TcpServerTransport . create ( 7878 ))
. block ()
. onClose ()
. block ();
RSocket clientRSocket =
RSocketConnector . create ()
// Enable Zero Copy
. payloadDecoder ( PayloadDecoder . ZERO_COPY )
. connect ( TcpClientTransport . create ( 7878 ))
. block ();
Para errores, preguntas y discusiones, utilice Github Issues.
Copyright 2015-2020 el autor o autores originales.
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.