RSocket adalah protokol biner untuk digunakan pada transport aliran byte seperti TCP, WebSockets, dan Aeron.
Hal ini memungkinkan model interaksi simetris berikut melalui pesan asinkron yang melewati satu koneksi:
Pelajari lebih lanjut di http://rsocket.io
master
sekarang didedikasikan untuk pengembangan jalur 1.2.x
Rilis dan pencapaian tersedia melalui Maven Central.
Contoh:
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 '
}
Snapshot tersedia melalui oss.jfrog.org (OJO).
Contoh:
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 '
}
Instal format google-java di Intellij, dari preferensi Plugin. Aktifkan di bawah Preferensi -> Pengaturan Lainnya -> Pengaturan format google-java
Format secara otomatis dengan
$./gradlew goJF
Bingkai dapat dicetak untuk membantu debugging. Atur logger io.rsocket.FrameLogger
untuk melakukan debug guna mencetak bingkai.
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 ();
}
}
}
Secara default, untuk memudahkan penggunaan RSocket, ia menyalin Payload yang masuk. Menyalin payload berdampak pada kinerja dan latensi. Jika Anda ingin menggunakan zero copy Anda harus menonaktifkan ini. Untuk menonaktifkan penyalinan, Anda harus menyertakan argumen payloadDecoder
di RSocketFactory
Anda. Ini akan memungkinkan Anda mengelola Payload tanpa menyalin data dari transportasi yang mendasarinya. Anda harus mengosongkan Payload setelah selesai menggunakannya atau Anda akan mengalami kebocoran memori. Jika digunakan dengan benar, ini akan mengurangi latensi dan meningkatkan kinerja.
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 ();
Untuk bug, pertanyaan dan diskusi silakan gunakan Masalah Github.
Hak Cipta 2015-2020 penulis atau penulis asli.
Berlisensi di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh salinan Lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.