MQTT client ID oluşturucu

Tek seferde 100’e kadar benzersiz MQTT client ID’si oluşturun — rastgele, UUID, hex veya zaman damgası tabanlı, kendi önekinizle. Her MQTT 3.1.1 broker’ının kabul etmek zorunda olduğu ID’ler için katı modu açın.

Seçeneklerinizi belirleyin ve “Client ID oluştur” düğmesine basın.

ID’ler tarayıcınızda Web Crypto API ile oluşturulur ve hiçbir yere gönderilmez.

MQTT client ID ne işe yarar?

Her MQTT client’ı CONNECT paketinde bir client tanımlayıcısı gönderir. Broker, client’ı yeniden bağlantılarda tanımak için bunu kullanır: broker’ın session’ı — abonelikleri, kuyruktaki QoS 1 ve QoS 2 mesajlarını ve bekleyen onayları — sakladığı anahtar budur. Bir cihaz aynı ID ve kalıcı bir session ile yeniden bağlanırsa kaldığı yerden devam eder. Farklı bir ID ile bağlanırsa broker onu tamamen yeni bir client olarak görür ve eski session süresi dolana kadar kalır.

Kural 1: client ID’ler benzersiz olmalıdır

Bir broker, client ID başına yalnızca bir bağlantıya izin verir. Zaten bağlı olan bir ID ile ikinci bir bağlantı gelirse broker ilkini kapatır — MQTT 5’te 0x8E Session taken over reason code’u ile. “Client’ım sürekli bağlantıyı kaybediyor” şikâyetlerinin en yaygın nedeni budur: aynı firmware sabitiyle yüklenmiş iki cihaz, iki sekmede açılmış bir web uygulaması veya iki replikaya ölçeklenmiş bir servis. İki client da yeniden bağlanır, birbirini düşürür ve döngü birkaç saniyede bir tekrarlanır. Diğer belirtiler için MQTT bağlantı hataları yazısına bakın.

İyi client ID’ler belirli bir cihaz için sabit (kalıcı session’lar çalışsın diye) ve tüm filo genelinde benzersizdir. Yaygın bir kalıp, okunabilir bir önek ile cihaza özgü bir değerin birleşimidir: seri numarası, MAC adresi ya da bir kez üretilip flash’a kaydedilen rastgele bir değer. Tarayıcı ve kısa ömürlü client’lar genellikle her bağlantıda yeni bir rastgele ID kullanır.

Kural 2: 23 karakter garantisi

MQTT 3.1.1 spesifikasyonuna göre bir broker yalnızca 0-9, a-z ve A-Z içeren 1–23 bayt uzunluğundaki client ID’leri kabul etmek zorundadır, geri kalan her şeyi ise kabul edebilir. Modern broker’ların çoğu tire, alt çizgi ve iki nokta içeren çok daha uzun ID’leri kabul eder; ancak bazı gömülü ve eski broker’lar bunları return code 2 (identifier rejected) ya da 0x85 Client Identifier not valid ile reddeder. Cihazlarınızın hangi broker’la konuşacağını kontrol edemiyorsanız yukarıdaki katı modu açın. Protokol sürümleri arasındaki farklar MQTT 5 ve 3.1.1 yazısında anlatılıyor.

Boş client ID’ler

Bir client sıfır uzunlukta bir client ID gönderip seçimi broker’a bırakabilir; ancak yalnızca clean session (3.1.1) veya clean start (5.0) ile birlikte, çünkü session’ı saklayacak sabit bir anahtar yoktur. MQTT 5 broker’ları üretilen ID’yi Assigned Client Identifier property’sinde döndürür. Bazı broker’lar bu özelliği kapatır; bu yüzden kendi ID’nizi üretmek her yerde çalışan seçenektir.

Test etmeye hazır mısınız? Oluşturduğunuz bir ID’yi online MQTT client’a yapıştırıp herkese açık bir broker’a bağlanın ya da session takeover’ı canlı görmek için aynı ID ile ikinci bir sekme açın.

Client ID hakkında sık sorulan sorular

Bir MQTT client ID’si en fazla ne kadar uzun olabilir?

MQTT 3.1.1, broker’ların yalnızca 0-9, a-z ve A-Z içeren 1–23 UTF-8 baytlık client ID’leri kabul etmesini zorunlu kılar ve daha fazlasını kabul etmelerine izin verir. MQTT 5 aynı garantiyi korur. Pratikte Mosquitto, EMQX, HiveMQ ve çoğu bulut broker’ı her türlü karakterle 65.535 bayta kadar ID kabul eder.

İki client aynı client ID’yi kullanırsa ne olur?

Broker mevcut bağlantıyı keser ve yenisini kabul eder (session takeover; MQTT 5 reason code 0x8E). İki client da otomatik yeniden bağlanıyorsa birbirlerini sürekli düşürürler ve ikisi de durmadan bağlantısı kopuyormuş gibi görünür.

Boş bir client ID kullanabilir miyim?

Evet, clean session (MQTT 3.1.1) veya clean start (MQTT 5) isterseniz. Bu durumda broker benzersiz bir ID atar; MQTT 5 bu ID’yi Assigned Client Identifier property’sinde döndürür. MQTT 3.1.1’de boş ID kalıcı bir session ile birlikte kullanılamaz.

Client ID gizli tutulmalı mı?

Hayır. Client ID’ler kimlik bilgisi değil, tanımlayıcıdır — broker loglarında görünür ve tahmin edilmeleri kolaydır. Her zaman kullanıcı adı ve şifre, token veya client sertifikasıyla kimlik doğrulayın ve bir client’ın diğerinin yerine geçmesini önlemek için ACL kullanın.

TestMQTT’nin yapımcılarından

Genel test broker’larının ötesine mi geçtiniz?

Genel test broker’ları binlerce yabancıyla paylaşılır. ConnectMQ, gerçek cihazlarınızla güvenle kullanabileceğiniz özel bir MQTT broker sunar — dakikalar içinde hazır.

  • Size özel, izole broker — topic’lerinizi başka kimse okuyamaz
  • Kullanıcı adı / şifre ile kimlik doğrulama ve topic bazlı erişim kontrolü
  • TLS ve güvenli WebSocket, MQTT 3.1.1 ve MQTT 5
  • İlk testten üretime kadar aynı istemci kodu