RSocket ist ein Binärprotokoll zur Verwendung bei Bytestream-Transporten wie TCP, WebSockets und Aeron.
Es ermöglicht die folgenden symmetrischen Interaktionsmodelle über die asynchrone Nachrichtenübermittlung über eine einzelne Verbindung:
Erfahren Sie mehr unter http://rsocket.io
master
ist nun der Entwicklung der 1.2.x
Linie gewidmet.
Releases und Meilensteine sind über Maven Central verfügbar.
Beispiel:
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 '
}
Schnappschüsse sind über oss.jfrog.org (OJO) verfügbar.
Beispiel:
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 '
}
Installieren Sie das Google-Java-Format in Intellij über die Plugin-Einstellungen. Aktivieren Sie die Option unter „Einstellungen“ -> „Andere Einstellungen“ -> „Google-Java-Format-Einstellungen“.
Automatisch formatieren mit
$./gradlew goJF
Frames können ausgedruckt werden, um das Debuggen zu erleichtern. Stellen Sie den Logger io.rsocket.FrameLogger
auf Debug ein, um die Frames zu drucken.
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 ();
}
}
}
Um die Verwendung von RSocket zu vereinfachen, kopiert es standardmäßig die eingehende Nutzlast. Das Kopieren der Nutzlast geht mit Kosten für Leistung und Latenz einher. Wenn Sie Zero Copy verwenden möchten, müssen Sie dies deaktivieren. Um das Kopieren zu deaktivieren, müssen Sie ein payloadDecoder
-Argument in Ihre RSocketFactory
einfügen. Dadurch können Sie die Nutzlast verwalten, ohne die Daten vom zugrunde liegenden Transport kopieren zu müssen. Sie müssen die Nutzlast freigeben, wenn Sie damit fertig sind, sonst kommt es zu einem Speicherverlust. Bei richtiger Anwendung wird die Latenz reduziert und die Leistung gesteigert.
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 ();
Für Fehler, Fragen und Diskussionen nutzen Sie bitte die Github Issues.
Copyright 2015-2020 beim ursprünglichen Autor oder den ursprünglichen Autoren.
Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die im Rahmen der Lizenz vertriebene Software „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Die spezifische Sprache, die die Berechtigungen und Einschränkungen im Rahmen der Lizenz regelt, finden Sie in der Lizenz.