私は moquette mqtt ブローカーを使用しており、実装と MQTT ブローカーを理解しようとしています。個人的なプロジェクトのためにブローカーにいくつかの変更を加えたいと思っています。
デバイスが PUBLISH メッセージをブローカーに送信し、ブローカーがサブスクライバーにメッセージを配信できない場合にどうなるか知りたいです。プロトコルは、PUBACK がパブリッシャーに送り返されることを示しています。moquette のソース コードでは、この PUBACK はメッセージをサブスクライバーに転送した後に送信されるようです。
sendPubAck() 関数をコメントアウトして、メッセージが正常に発行されなかったことをシミュレートしたので、パブリッシャーがメッセージを再度発行すると想定しました。ただし、受信メッセージ ハンドラー関数の横に print ステートメントを追加すると、パブリッシャーからブローカーに定期的に送信される PINGREQ メッセージしか表示されません。パブリッシュ メッセージが表示されません。
私の質問は次のとおりです。クライアント デバイスは、メッセージを再発行するタイミングを正確にどのように決定しますか? sendPubAck() 関数をコメントアウトしても、パブリッシャーはメッセージを再送信しないようです。