Protokol detak jantung ditulis dalam Java, bekerja melalui UDP
Protokol detak jantung disusun berdasarkan notifikasi berkelanjutan dari datagram UDP dengan penundaan 1000 milidetik. Bidang payload berisi ID pengidentifikasi dari klien yang dapat terdiri dari string seperti alamat MAC kartu jaringan yang saat ini digunakan oleh sumber ping atau pengidentifikasi seperti nama pengguna. Server akan mendengarkan berbagai ping, mengurutkannya berdasarkan pengidentifikasi dan mengelola berbagai status yang akan mereka tentukan sendiri. Kapan pun server mengetahui bahwa setelah penundaan 3000 milidetik belum menerima ping apa pun dari klien, ia akan memberi tahu melalui suatu peristiwa bahwa pengguna protokol ini tentang kemungkinan hilangnya koneksi, menyarankan untuk membatasi atau menghentikan pertukaran data melalui koneksi lain. protokol dependen seperti TCP. Jika dalam 5.000 milidetik Anda menerima dengan pengenal ini klien akan terhubung kembali, artinya saluran komunikasi data dapat dipulihkan. Jika tidak, klien akan dianggap offline sepenuhnya. Semua ini akan diberitahukan seperti yang disebutkan di atas melalui manajemen acara seperti yang ditunjukkan di bawah ini:
@ 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 ());
}
Contoh kode di atas menunjukkan penangkapan berbagai peristiwa pada keadaan klien, kemudian akan menjadi tugas dari mereka yang melaksanakan pendengar keputusan tentang apa yang harus dilakukan ketika menangkap jenis peristiwa tertentu seperti di bawah ini :
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 ());
}
}
Peristiwa yang dihasilkan selain berisi muatan juga akan berisi penundaan yang berlalu sehubungan dengan peristiwa sebelumnya dengan pengidentifikasi muatannya sendiri dan stempel waktu penerimaan ping saat ini.
Penggunaan protokol ini akan memungkinkan pengelolaan status koneksi antara klien dan server yang lebih baik dan kontrol yang lebih besar terhadap kemungkinan kesalahan.