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
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。