RSocket est un protocole binaire à utiliser sur les transports de flux d'octets tels que TCP, WebSockets et Aeron.
Il permet les modèles d'interaction symétriques suivants via un message asynchrone passant sur une seule connexion :
En savoir plus sur http://rsocket.io
master
est désormais dédiée au développement de la gamme 1.2.x
Les versions et les jalons sont disponibles via Maven Central.
Exemple:
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 '
}
Les instantanés sont disponibles via oss.jfrog.org (OJO).
Exemple:
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 '
}
Installez le format google-java dans Intellij, à partir des préférences des plugins. Activer sous Préférences -> Autres paramètres -> Paramètres au format google-java
Formater automatiquement avec
$./gradlew goJF
Les images peuvent être imprimées pour faciliter le débogage. Définissez l'enregistreur io.rsocket.FrameLogger
pour déboguer pour imprimer les images.
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 ();
}
}
}
Par défaut, pour rendre RSocket plus facile à utiliser, il copie la charge utile entrante. La copie de la charge utile a un coût en termes de performances et de latence. Si vous souhaitez utiliser zéro copie, vous devez désactiver cette option. Pour désactiver la copie, vous devez inclure un argument payloadDecoder
dans votre RSocketFactory
. Cela vous permettra de gérer la charge utile sans copier les données du transport sous-jacent. Vous devez libérer la charge utile lorsque vous en avez terminé avec elle, sinon vous obtiendrez une fuite de mémoire. Utilisé correctement, cela réduira la latence et augmentera les performances.
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 ();
Pour les bugs, les questions et les discussions, veuillez utiliser les problèmes Github.
Copyright 2015-2020 le ou les auteurs originaux.
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « TEL QUEL », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.