RSocket é um protocolo binário para uso em transportes de fluxo de bytes, como TCP, WebSockets e Aeron.
Ele permite os seguintes modelos de interação simétrica por meio de mensagem assíncrona passando por uma única conexão:
Saiba mais em http://rsocket.io
master
agora é dedicado ao desenvolvimento da linha 1.2.x
Lançamentos e marcos estão disponíveis no Maven Central.
Exemplo:
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 '
}
Instantâneos estão disponíveis em oss.jfrog.org (OJO).
Exemplo:
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 o formato google-java no Intellij, nas preferências de Plugins. Ative em Preferências -> Outras configurações -> Configurações do formato google-java
Formate automaticamente com
$./gradlew goJF
Os quadros podem ser impressos para ajudar na depuração. Configure o criador de logs io.rsocket.FrameLogger
para depurar para imprimir os quadros.
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 ();
}
}
}
Por padrão, para facilitar o uso do RSocket, ele copia a carga útil recebida. Copiar a carga prejudica o desempenho e a latência. Se você quiser usar cópia zero, você deve desabilitar isso. Para desabilitar a cópia você deve incluir um argumento payloadDecoder
em seu RSocketFactory
. Isso permitirá que você gerencie o Payload sem copiar os dados do transporte subjacente. Você deve liberar a carga útil quando terminar de usá-la ou ocorrerá um vazamento de memória. Usado corretamente, isso reduzirá a latência e aumentará o desempenho.
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 bugs, perguntas e discussões, use o Github Issues.
Copyright 2015-2020 do autor ou autores originais.
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo, exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.