RSocket — это двоичный протокол для использования в транспортных потоках байтов, таких как TCP, WebSockets и Aeron.
Он обеспечивает следующие модели симметричного взаимодействия посредством асинхронной передачи сообщений через одно соединение:
Узнайте больше на http://rsocket.io.
master
ветка теперь посвящена разработке линейки 1.2.x
Релизы и этапы доступны через Maven Central.
Пример:
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 '
}
Снимки доступны на сайте oss.jfrog.org (OJO).
Пример:
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 '
}
Установите формат google-java в Intellij из настроек плагинов. Включите в разделе «Настройки» -> «Другие настройки» -> «Настройки формата Google-Java».
Автоматическое форматирование с помощью
$./gradlew goJF
Кадры можно распечатать, чтобы облегчить отладку. Настройте регистратор io.rsocket.FrameLogger
на отладку для печати кадров.
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 ();
}
}
}
По умолчанию, чтобы упростить использование RSocket, он копирует входящую полезную нагрузку. Копирование полезных данных приводит к снижению производительности и задержек. Если вы хотите использовать нулевое копирование, вы должны отключить это. Чтобы отключить копирование, вы должны включить аргумент payloadDecoder
в свой RSocketFactory
. Это позволит вам управлять полезной нагрузкой без копирования данных из базового транспорта. Вы должны освободить полезную нагрузку, когда закончите с ней, иначе произойдет утечка памяти. При правильном использовании это уменьшит задержку и повысит производительность.
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 ();
Для ошибок, вопросов и обсуждений используйте раздел Github Issues.
Авторские права принадлежат оригинальному автору или авторам, 2015–2020 гг.
Лицензируется по лицензии Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.