Keepalive Timeout pada MQTT

Dalam komunikasi antar perangkat yang menggunakan protokol MQTT, keepalive timeout memiliki peran penting untuk menjaga stabilitas koneksi. Ketika sebuah klien MQTT terhubung ke server (broker), klien harus mengatur nilai keepalive timeout—biasanya dalam satuan detik. Nilai yang umum digunakan adalah 60 detik, yang artinya klien MQTT diharapkan mengirimkan paket setidaknya sekali setiap 60 detik.

Jika dalam periode keepalive tidak ada paket lain yang dikirim, klien dapat mengirimkan pesan PINGREQ kepada server. Server kemudian akan membalas dengan pesan PINGRESP. Tujuan dari proses ini adalah untuk mendeteksi apakah koneksi TCP masih aktif atau tidak. Dalam beberapa kasus, koneksi TCP bisa terlihat aktif meskipun sudah terputus, dan keepalive membantu mendeteksi hal tersebut.

Apabila server tidak menerima paket MQTT dari klien dalam interval keepalive (ditambah sedikit masa tenggang, biasanya sekitar 150% dari nilai keepalive), server akan menutup koneksi TCP. Ini memaksa klien untuk melakukan koneksi ulang.

Sebaliknya, jika klien tidak menerima balasan PINGRESP dari server dalam waktu yang telah ditentukan (biasanya juga 150% dari nilai keepalive), pustaka MQTT di klien akan menutup koneksi TCP, yang memaksa aplikasi klien untuk kembali melakukan koneksi ulang ke server.

Proses keepalive ini bisa dimatikan jika diperlukan. Caranya adalah dengan mengatur nilai keepalive menjadi 0 saat klien melakukan koneksi awal ke server. Ini berguna dalam skenario tertentu di mana tidak diinginkan adanya pemeriksaan rutin untuk memastikan koneksi masih hidup.

import paho.mqtt.client as mqtt 

clientPub = mqtt.Client("NextSystem_Brg68SiangF2_40112")
clientPub.connect("broker.mqtt-dashboard.com", keepalive=120) # keep alive 120 detik