ustable 네트워크에서 작동 할 수있는 클라이언트 - 서버 시스템을 만들고 있습니다. 한 번에 연결이 끊어 질 수 있다고 가정하고 시스템은 다시 연결하여 작업을 계속해야합니다. 저는 Netty를 사용하고 문제가 생겼습니다. 우리가 보낸 메시지가 다른 호스트에 의해 수신되었음을 어떻게 알 수 있습니까?TCP Netty 메시지 수신 확인
사용할 수 나는이 목적 ChannelFuture에 대해 생각하고, 내가 단순히 부착 미래 리스너에 실패 할 경우 다시 메시지를 보내려고 수 있습니다 : 그 청취자,
ChannelFuture fut = channel.write(message);
fut.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (!future.isSuccess()) {
LOGGER.error("Message send failed. Message: " + message, future.getCause());
//Queue message to be send after reconnect
}
}
});
하지만 난이 완료되면, 내가 발견 절대로 오류를 인쇄하지 않습니다. (나는 시스템이 거의 작동하지 않을 때 네트워크에서 플러그를 뽑음으로써 이것을 테스트했다.) 또한 내가 보낸 메시지의 모든 미래가 '완료'상태가되며 메시지가 수신되었는지 확인하는 방법이 있다는 것을 알았다. (확인 메시지를 사용하지 않음)
알다시피, TCP 프로토콜은 메시지가 수신된다는 것을 보장하며, 작업 할 때 어떤 송신 패키지가 목적지에 도달했는지 알 수 있습니다. 나는 Netty가 그것을 알 수 없다는 것을 믿을 수 없다.
메시지가 배달되었음을 알 수있는 좋은 방법이 있습니까?
TCP는 실제로 메시지 (또는 해당 바이트)가 TCP 소켓에 기록 된 경우 해당 메시지 (또는 그 바이트)가 결국 클라이언트 소켓으로 전달된다는 것을 보장합니다. 응용 프로그램 수준의 메시지는 알 수 없지만 메시지 배달을 보장합니다. 네트워크 또는 실제 계층에서 해결할 수없는 문제가 발생하면 적어도 실패한 메시지를 보내는 소켓에 알립니다. – Bhaskar