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-format ใน 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
ลิขสิทธิ์ 2015-2020 ผู้เขียนต้นฉบับหรือผู้แต่ง
ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ได้เว้นแต่จะเป็นไปตามใบอนุญาต คุณสามารถขอรับสำเนาใบอนุญาตได้ที่
http://www.apache.org/licenses/LICENSE-2.0
เว้นแต่กฎหมายที่ใช้บังคับกำหนดหรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์ที่เผยแพร่ภายใต้ใบอนุญาตนี้จะถูกแจกจ่าย "ตามที่เป็น" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาต