如何检测Socket连接是否成功?
How to detect if RSocket connection is successfull?
我有以下程序可以检测连接失败,即 doBeforeRetry。
谁能告诉我如何检测成功连接或重新连接。我想集成一个监控此连接的健康检查程序,但我无法捕获通知连接成功的事件。
谢谢
requester = RSocketRequester.builder()
.rsocketConnector(connector -> {
connector.reconnect(Retry
.fixedDelay(Integer.MAX_VALUE,Duration.ofSeconds(1))
.doBeforeRetry(e-> System.out.println("doBeforeRetry===>"+e))
.doAfterRetry(e-> System.out.println("doAfterRetry===>"+e))
);
connector.payloadDecoder(PayloadDecoder.ZERO_COPY);
}
).dataMimeType(MediaType.APPLICATION_CBOR)
.rsocketStrategies(strategies)
.tcp("localhost", 7999);
如果您想知道它是否真的健康,您可能应该有一个副任务来轮询 RSocket 的健康状况,方法是向您的后端发送自定义 ping 协议之类的东西。你可以计时并确认你有一个健康的连接,记录延迟和 success/failures.
我通过以下方法实现了连接成功或重连的检测。
客户端(连接初始化)
Mono<RSocketRequester> requester = Mono.just(RSocketRequester.builder()
.rsocketConnector(
// connector configuration goes here
)
.dataMimeType(MediaType.APPLICATION_CBOR)
.setupRoute("client-handshake")
.setupData("caller-name")
.tcp("localhost", 7999)));
一个服务器端
@ConnectMapping("client-handshake")
public void connect(RSocketRequester requester, @Payload String callerName) {
LOG.info("Client Connection Handshake: [{}]", callerName);
requester
.route("server-handshake")
.data("I am server")
.retrieveMono(Void.class)
.subscribe();
}
在客户端,当我收到以下方法的回调时,我检测到连接成功。
@MessageMapping("server-handshake")
public Mono<ConsumerPreference> handshake(final String response){
LOG.info("Server Connection Handshake received : Server message [{}]", response.getCallerName());
connectionSuccess.set(true);
return Mono.empty();
}else{
throw new InitializationException("Invalid response message received from Server");
}
}
此外,创建了一个应用程序级心跳以确保连接的活跃度。
我有以下程序可以检测连接失败,即 doBeforeRetry。
谁能告诉我如何检测成功连接或重新连接。我想集成一个监控此连接的健康检查程序,但我无法捕获通知连接成功的事件。
谢谢
requester = RSocketRequester.builder()
.rsocketConnector(connector -> {
connector.reconnect(Retry
.fixedDelay(Integer.MAX_VALUE,Duration.ofSeconds(1))
.doBeforeRetry(e-> System.out.println("doBeforeRetry===>"+e))
.doAfterRetry(e-> System.out.println("doAfterRetry===>"+e))
);
connector.payloadDecoder(PayloadDecoder.ZERO_COPY);
}
).dataMimeType(MediaType.APPLICATION_CBOR)
.rsocketStrategies(strategies)
.tcp("localhost", 7999);
如果您想知道它是否真的健康,您可能应该有一个副任务来轮询 RSocket 的健康状况,方法是向您的后端发送自定义 ping 协议之类的东西。你可以计时并确认你有一个健康的连接,记录延迟和 success/failures.
我通过以下方法实现了连接成功或重连的检测。
客户端(连接初始化)
Mono<RSocketRequester> requester = Mono.just(RSocketRequester.builder()
.rsocketConnector(
// connector configuration goes here
)
.dataMimeType(MediaType.APPLICATION_CBOR)
.setupRoute("client-handshake")
.setupData("caller-name")
.tcp("localhost", 7999)));
一个服务器端
@ConnectMapping("client-handshake")
public void connect(RSocketRequester requester, @Payload String callerName) {
LOG.info("Client Connection Handshake: [{}]", callerName);
requester
.route("server-handshake")
.data("I am server")
.retrieveMono(Void.class)
.subscribe();
}
在客户端,当我收到以下方法的回调时,我检测到连接成功。
@MessageMapping("server-handshake")
public Mono<ConsumerPreference> handshake(final String response){
LOG.info("Server Connection Handshake received : Server message [{}]", response.getCallerName());
connectionSuccess.set(true);
return Mono.empty();
}else{
throw new InitializationException("Invalid response message received from Server");
}
}
此外,创建了一个应用程序级心跳以确保连接的活跃度。