RSocketとWebSocket
3421 ワード
アプリケーション バックエンドのパラダイマ レアティーボは、さまざまなアルゴリズムに対応する必要があります.
Dentre as principais, está na comunicação http entre as aplicações, ou seja, a comunicação http é síncrona e o processamento é assíncrono.詳細:
cliente -> efetua uma requisição ao servidor
クライアント -> aguarda a reposta
servidor -> recebe a requisição
servidor -> processa em um outro evento
servidor -> 応答を送信
cliente -> recebe a reposta e finaliza o processo
100% の同期で、ソケット反応性を利用することができます. Socket utiliza protocolo tcp ou http assincrono, baseado em fluxos reativos. O dados são venados de forma binária, onde não precisamos nos preocupar com a serialização/deserialização (por default utiliza-se json).
Enviamos um mono e esperamos como resposta um outro mono
Enviamos um mono e esperamos um flux
Enviamos um mono e não esperamos resposta
Enviamos um flux e esperamos outro flux
クライアントとサーバーの 2 つの依存関係 (春のイニシャライザーのユーティリティの使用) としての追加.
obs: apenas または rsocket を使用する場合は、依存する webflux を使用し、apenas を porta tcp no servidor として構成する必要があります.
プロトコルの http なしでサーバーを使用する場合は、次の構成を追加します.
Crie as 2 クラス、タントのクライアントコモのサービドール
Abaixo um exemplo de código no servidor e client:
サーバー: mapeamos 経由の anotação @MessageMapping a rota que será utilizada.
クライアント: envio de um fluxo com 2 elementos e recebendo em algum momento as respostas.
Socket é uma opção mais simples, para uso de uma comunicação 完全リアクティブ.
Dentre as principais, está na comunicação http entre as aplicações, ou seja, a comunicação http é síncrona e o processamento é assíncrono.詳細:
cliente -> efetua uma requisição ao servidor
クライアント -> aguarda a reposta
servidor -> recebe a requisição
servidor -> processa em um outro evento
servidor -> 応答を送信
cliente -> recebe a reposta e finaliza o processo
100% の同期で、ソケット反応性を利用することができます. Socket utiliza protocolo tcp ou http assincrono, baseado em fluxos reativos. O dados são venados de forma binária, onde não precisamos nos preocupar com a serialização/deserialização (por default utiliza-se json).
通信のヒント
リクエスト - レスポンス
Enviamos um mono e esperamos como resposta um outro mono
リクエスト - ストリーム
Enviamos um mono e esperamos um flux
ファイア アンド フォーゲット
Enviamos um mono e não esperamos resposta
運河
Enviamos um flux e esperamos outro flux
Canal の通信モデルの使用例。
クライアントとサーバーの 2 つの依存関係 (春のイニシャライザーのユーティリティの使用) としての追加.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-rsocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
obs: apenas または rsocket を使用する場合は、依存する webflux を使用し、apenas を porta tcp no servidor として構成する必要があります.
プロトコルの http なしでサーバーを使用する場合は、次の構成を追加します.
spring:
rsocket:
server:
transport: websocket
mapping-path: /rsocket
port: 7000
Crie as 2 クラス、タントのクライアントコモのサービドール
@NoArgsConstructor
@AllArgsConstructor
@Data
public class PersonIn {
private String name;
}
@AllArgsConstructor
@Data
public class PersonOut {
private String name;
private String code;
}
Abaixo um exemplo de código no servidor e client:
サーバー: mapeamos 経由の anotação @MessageMapping a rota que será utilizada.
@Controller
@Slf4j
public class PersonController {
@MessageMapping("person")
public Flux<PersonOut> addCode(Flux<PersonIn> fluxPerson) {
return fluxPerson.doOnNext(p -> log.info("Receive : {}", p.toString()))
.map(p -> {
var code = UUID.randomUUID().toString();
return new PersonOut(p.getName(), code);
});
}
}
クライアント: envio de um fluxo com 2 elementos e recebendo em algum momento as respostas.
var list2 = List.of(new PersonIn("Fabricio"), new PersonIn("Suzana"));
var fluxIn = Flux.fromIterable(list2);
RSocketRequester requester = builder.websocket(URI.create("http://localhost:8080/rsocket"));
requester.route("person")
.data(fluxIn)
.retrieveFlux(PersonOut.class)
.subscribe(p -> log.info(p.toString()));
Socket é uma opção mais simples, para uso de uma comunicação 完全リアクティブ.
Reference
この問題について(RSocketとWebSocket), 我々は、より多くの情報をここで見つけました https://dev.to/fabriciolfj/rsocket-e-websocket-1d85テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol