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 '
}
從外掛程式首選項中在 Intellij 中安裝 google-java-format。在首選項 -> 其他設定 -> google-java-format 設定下啟用
自動格式化為
$./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 更易於使用,它會複製傳入的有效負載。複製有效負載會犧牲效能和延遲。如果您想使用零複製,則必須停用此功能。若要停用複製,您必須在RSocketFactory
中包含payloadDecoder
參數。這將允許您管理有效負載,而無需從底層傳輸複製資料。使用完有效負載後,必須釋放它們,否則會出現記憶體洩漏。正確使用這將減少延遲並提高效能。
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 問題。
版權所有 2015-2020 原作者或作者。
根據 Apache 許可證 2.0 版(“許可證”)獲得許可;除非遵守許可證,否則您不得使用此文件。您可以在以下位置取得許可證副本:
http://www.apache.org/licenses/LICENSE-2.0
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。