매우 짧은 시간에 서버에 몇 초마다 패킷을 전송해야하는 응용 프로그램을 구현해야했습니다. 서버가 패킷을 수신하면 클라이언트에 응답을 보내고 다른 패킷을 보냈습니다. 이 모든 것은 좋지만 우리는 TCP를 사용하고 있었고 응답은 서버가 패킷을 받았을 때와 후 처리가 아닌 것처럼 보였습니다. 그래서 저에게 이상하게 여깁니다. 왜 이렇게 하시겠습니까? 가가 성공적으로 보낼 경우에만 TCP에서 유효성 검사가 필요합니까?
try {
send packet // exception is thrown if connection is lost
remove packet from queue
} catch exception {
try to reconnect
}
그래서이 경우에는 패킷이 큐에서 제거됩니다 : 클라이언트는 내가 모든 패킷을 보관하고 이런 일을 한 큐를했다.
이것에 대한 아이디어가 있으십니까? 이게 최선의 관행인가? 누군가가 나를 위해 이걸 지울 수 있다면 고맙겠습니다.
감사합니다.
Q : 무엇이 당신의 질문입니까? 대기열을 유지하는 것보다 "발사하고 잊어 버리는"것이 더 낫겠습니까? A : 가능합니다. TCP 대신 UDP를 사용하는 것이 더 낫습니다 (대기열을 유지하고 있고 재 시도를 관리하는 한)? A : 가능합니다. 어떤 종류의 "ACK"없이 "보내기"오류를 감지하는 것이 문제가됩니까? A : 네. 이 (잠재적 인) 질문 중 하나에 대한 대답은 "다릅니다"입니다. ;) IMHO ... – paulsm4
TCP는 전송 및 주문을 보장합니다. 따라서 UDP를 사용하면 주문을 잃을 수 있으므로 직접 다시 주문하고 조각을해야합니다. –
연결이 작동 중임을 알아야하는 경우 TCP_KEEPALIVE라는 옵션이 있습니다.이 옵션은 패킷을 보내 연결 상태를 유지하고 패킷이 유실 된 경우 시간을 초과하도록합니다. 이것은 자연스럽게 다른 쪽 끝의 소프트웨어 TCP 연결이 아직 살아 있는지 확인합니다. –