Java로 작성된 하트비트 프로토콜은 UDP를 통해 작동합니다.
하트비트 프로토콜은 1000밀리초 지연으로 UDP 데이터그램을 지속적으로 알림으로써 구성됩니다. 페이로드 필드에는 핑 소스에서 현재 사용 중인 네트워크 카드의 MAC 주소와 같은 문자열이나 사용자 이름과 같은 식별자로 구성될 수 있는 클라이언트의 식별자 ID가 포함됩니다. 서버는 식별자에 따라 정렬하고 스스로 정의할 다양한 상태를 관리하는 다양한 핑을 수신합니다. 서버가 3000밀리초의 지연 후에 클라이언트로부터 어떠한 핑도 수신하지 못했다는 사실을 알게 되면 이벤트를 통해 이 프로토콜의 사용자에게 연결이 끊어질 가능성이 있음을 알리고 다른 연결을 통한 데이터 교환을 제한하거나 중지하도록 권고합니다. TCP와 같은 종속 프로토콜. 5,000밀리초 이내에 이 식별자를 받게 되면 클라이언트가 다시 연결되며, 이는 데이터 통신 채널을 복원할 수 있음을 의미합니다. 그렇지 않으면 클라이언트는 완전히 오프라인으로 간주됩니다. 이 모든 내용은 위에서 언급한 바와 같이 아래와 같이 이벤트 관리를 통해 공지됩니다.
@ Override
public void onHeartbeat ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Received heartbeat from " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onDeath ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> event . getSource () + " died after " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onLossCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Communication lost of " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onReacquiredCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Communication reacquired of " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onAcquiredCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> event . getSource () + " connected at " + event . getBeatTimeStamp ());
}
위의 샘플 코드는 클라이언트 상태에 대한 다양한 이벤트 캡처를 보여줍니다. 그러면 아래와 같이 특정 유형의 이벤트를 캡처할 때 수행할 작업에 대한 결정을 리스너를 구현하는 사람들의 작업이 됩니다.
public class ServerStart implements HeartbeatListener {
private static final ServerStart thisInstance = new ServerStart ();
public static void main ( String [] args ) {
HeartbeatProtocolManager heartbeatProtocolManager = new HeartbeatProtocolManager ( thisInstance );
heartbeatProtocolManager . addHost ( "Test" , 43210 ); //identifier, port
heartbeatProtocolManager . addHost ( "Test1" , 43211 );
}
@ Override
public void onHeartbeat ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Received heartbeat from " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onDeath ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> event . getSource () + " died after " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onLossCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Communication lost of " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onReacquiredCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> "Communication reacquired of " + event . getSource () + " in " + event . getTimeFromPreviousBeat () + " at " + event . getBeatTimeStamp ());
}
@ Override
public void onAcquiredCommunication ( HeartbeatEvent event ) {
LOGGER . log ( Level . INFO , () -> event . getSource () + " connected at " + event . getBeatTimeStamp ());
}
}
페이로드를 포함하는 것 외에 생성된 이벤트에는 자체 페이로드 식별자와 현재 핑 수신의 타임스탬프가 있는 이전 이벤트와 관련하여 전달된 지연도 포함됩니다.
이 프로토콜을 사용하면 클라이언트와 서버 간의 연결 상태를 더 잘 관리하고 가능한 오류를 더 잘 제어할 수 있습니다.