Yönetilen MQTT Bulutu

Mobil Uygulamalar İçin Yönetilen MQTT Broker Kullanımı

Mobil uygulamalar bir MQTT broker üzerinden IoT cihazlarıyla gerçek zamanlı konuşabilir. Bağlantı yaşam döngüsünü, bunun yerine ne zaman push bildirimleri kullanacağınızı ve pili ve kimlik bilgilerini nasıl koruyacağınızı öğrenin.

Bir bulut broker üzerinden IoT cihazlarıyla gerçek zamanlı mesajlaşan akıllı telefonları gösteren mobil uygulamalar için MQTT broker illüstrasyonu
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Mobil uygulamalar için bir MQTT broker, telefonun cihaz verisini değiştiği anda görmesini ve çok az ek yükle komutları geri göndermesini sağlar. Bu rehber mobil uygulamaların nasıl bağlanması gerektiğini, MQTT'nin ne zaman doğru araç olduğunu ve platform push bildirimlerinin ne zaman doğru araç olduğunu, pil kullanımını nasıl düşük tutacağınızı ve kimlik bilgilerini nasıl güvenle yöneteceğinizi, ConnectMQ'ya karşı çalışan bir örnekle açıklıyor.

Mobil Uygulamalar Neden MQTT Kullanır

Mobil IoT uygulamaları genellikle üç şeye ihtiyaç duyar: canlı durumu göstermek (kapı kilitli mi, tank seviyesi ne), komut göndermek (pompayı çalıştır) ve değişikliklere hızla tepki vermek. Birkaç saniyede bir REST API'yi yoklamak bu üçünü de kötü karşılar: pili ve veriyi israf eder, gecikme ekler ve backend'inize yük bindirir. MQTT, uygulama etkinken tek bir uzun ömürlü bağlantıyı açık tutar ve yalnızca değişeni iletir.

Ortadaki broker uygulamayı cihazlardan ayırır. Telefonun asla bir cihazın IP adresine ihtiyacı olmaz; her iki taraf da bilinen bir uç noktayla konuşur. Bu rolde yeniyseniz önce bir MQTT broker'ın ne yaptığı yazısını okuyun.

Bir Telefondan Bağlantı Seçenekleri

Taşıma URL Ne zaman kullanılır
TLS üzerinden MQTT mqtts://broker.connectmq.com:8883 TCP destekli bir MQTT kütüphanesine sahip native uygulamalar (Kotlin, Swift, Flutter)
Secure WebSocket üzerinden MQTT wss://broker.connectmq.com:8084/mqtt React Native, Ionic, PWA'lar ve webview'lar; 8883'ü engelleyen ağlar

Her ikisi de şifrelidir ve her ikisi de MQTT 3.1.1 ve 5.0 ile çalışır. WebSocket, JavaScript tabanlı uygulamalarda ve kısıtlayıcı Wi-Fi ağlarında çoğu zaman en az dirençli yoldur; native TLS ise biraz daha verimlidir. Üretimdeki bir uygulamadan asla şifresiz 1883 veya 8083 portlarını kullanmayın. WebSocket üzerinden MQTT rehberi WebSocket taşımasını derinlemesine açıklıyor.

MQTT ve Push Bildirimleri

Bu en önemli tasarım kararıdır ve cevap genellikle "ikisi birden"dir.

İhtiyaç MQTT Platform push (APNs / FCM)
Uygulama açıkken canlı güncellemeler Mükemmel Uygun değil
Uygulama kapalıyken uyarılar Güvenilir değil Bunun için tasarlanmış
Çift yönlü komutlar Evet Hayır
Arka planda pil maliyeti Açık tutulursa yüksek İşletim sistemi yönetir
Telefon çevrimdışıyken teslimat Kalıcı oturum sürdükçe Platform tarafından kuyruğa alınır

Mobil işletim sistemleri arka plandaki uygulamaları ve soketlerini askıya alır. Özellikle iOS, bir MQTT bağlantısını arka planda süresiz açık tutmanıza izin vermez. Bu yüzden sağlam mimari şöyledir:

  1. Ön plan: uygulama broker'a bağlanır, kullanıcının görüntülediği cihazlara abone olur ve komutları MQTT üzerinden gönderir.

  2. Arka plan: uygulama bağlantıyı temiz bir şekilde keser. Küçük bir backend servisi broker'daki uyarı topic'lerine abone olur ve önemli bir şey olduğunda platform push bildirimleri gönderir.

  3. Ön plana dönüş: uygulama yeniden bağlanır, retained message'lar mevcut durumu anında teslim eder ve arayüz birkaç an içinde güncellenir.

  4. adımdaki backend aktarıcısı, çalıştırdığınız sıradan bir MQTT istemcisidir; örneğin bir Node.js veya Python servisi. ConnectMQ push bildirimlerini kendisi göndermez ve bu mantığı kendi servisinizde tutmak, hangi olayların bildirime dönüşeceği üzerinde size kontrol sağlar.

Pil ve Veri Konuları

  • Yalnızca gerektiğinde bağlanın. Bağlantıyı ilgili ekran göründüğünde açın ve uygulama arka plana geçtiğinde kapatın.
  • Dar abone olun. # yerine home/42/devices/+/state konusuna abone olun. Aldığınız her mesaj radyo süresine mal olur.
  • Durum için retained message kullanın. Uygulama abone olduğunda bilinen son değeri anında alır; böylece asla yoklama yapmanız veya yenileme istemeniz gerekmez.
  • Orta düzeyde bir keep alive seçin. 30 ila 60 saniye, ölü bağlantıların hızlı tespiti ile daha az radyo uyanması arasında denge kurar.
  • Payload'ları kompakt tutun. Kısa JSON anahtarları veya ikili kodlamalar hücresel bağlantılarda işe yarar.
  • Destekleniyorsa MQTT 5 topic alias ve message expiry kullanın. Alias'lar tekrar eden uzun topic adlarını küçültür; message expiry eskimiş komutların geç teslim edilmesini durdurur.
  • Yeniden bağlanırken geri çekilin. Mobil ağlar sürekli değişir; üstel backoff pili tüketen sıkı yeniden deneme döngülerini önler.

Çalışan Örnek: MQTT.js ile React Native veya Web

MQTT.js tarayıcılarda ve React Native'de WebSocket üzerinden çalışır. Bu modül bağlanma, abone olma ve uygulama yaşam döngüsü yönetimini kapsar.

import mqtt from "mqtt";

const BROKER_URL = "wss://broker.connectmq.com:8084/mqtt";

export function createDeviceConnection({ clientId, username, password, homeId, onState }) {
  const client = mqtt.connect(BROKER_URL, {
    clientId,
    username,
    password,
    protocolVersion: 5,
    keepalive: 45,
    clean: true,
    reconnectPeriod: 3000,
    connectTimeout: 10000,
  });

  const stateTopic = `homes/${homeId}/devices/+/state`;

  client.on("connect", () => {
    client.subscribe(stateTopic, { qos: 1 }, (err) => {
      if (err) console.warn("Subscribe failed", err.message);
    });
  });

  client.on("message", (topic, payload) => {
    const deviceId = topic.split("/")[3];
    try {
      onState(deviceId, JSON.parse(payload.toString()));
    } catch {
      console.warn("Ignoring non-JSON payload on", topic);
    }
  });

  client.on("error", (err) => console.warn("MQTT error", err.message));

  return {
    sendCommand(deviceId, command) {
      client.publish(
        `homes/${homeId}/devices/${deviceId}/cmd`,
        JSON.stringify(command),
        { qos: 1, properties: { messageExpiryInterval: 30 } }
      );
    },
    pause() {
      client.end(false);
    },
    resume() {
      if (!client.connected) client.reconnect();
    },
  };
}

React Native'de pause() ve resume() fonksiyonlarını bir AppState değişiklik dinleyicisinden çağırın. 30 saniyelik message expiry, bir cihaz çevrimdışıyken kuyruğa alınan bir komutun dakikalar sonra beklenmedik şekilde çalışmayacağı anlamına gelir. Bazı React Native kurulumları bir WebSocket veya Buffer polyfill'i gerektirir; platforma özgü ayrıntılar için React Native MQTT rehberine, Dart ile geliştiriyorsanız Flutter MQTT rehberine bakın.

Hesap olmadan denemek için örneği ücretsiz herkese açık MQTT broker'a yönlendirin, kullanıcı adı ve parolayı çıkarın, boş olmayan benzersiz herhangi bir client ID kullanın ve topic'lerin başına connectmq/demo/m7d2w/homes/... gibi benzersiz bir önek ekleyin. Herkese açık alandaki her şey herkes tarafından okunabilir, bu yüzden yalnızca demolar için kullanın.

Kimlik Bilgilerini Güvenle Yönetmek

Bir mobil uygulama ikili dosyası tersine derlenebilir; bu yüzden içine gömülen her şeyi herkese açık kabul edin.

  1. Uygulamaya tek bir ortak broker parolası koymayın. Sızarsa her kullanıcının trafiği açığa çıkar ve her kurulumu bozmadan iptal edemezsiniz.
  2. Backend'inizden kullanıcı veya oturum başına kimlik bilgileri verin. Kullanıcı uygulamanızda oturum açtıktan sonra API'niz o kullanıcının kullanması gereken MQTT kimlik bilgilerini ve client ID'yi döndürür.
  3. Topic'leri kullanıcıya veya eve göre kapsamlandırın. Topic'leri her kullanıcının verisi kendi önekinin altında olacak şekilde tasarlayın ve hangi komutların kimden kabul edileceğini cihaz ve backend tarafında uygulayın.
  4. Yenileyin ve iptal edin. Bir kullanıcı oturumu kapattığında veya bir telefon kaybolduğunda kimlik bilgilerini iptal edin.
  5. Komutları cihazda veya backend'de doğrulayın. Bir komutun meşru bir ekrandan geldiğine asla güvenmeyin.

ConnectMQ client ID'leri verilen kimlik bilgilerine bağlar ve tekrarlanan başarısız girişlerden sonra IP'leri engeller; bu da credential stuffing saldırılarına karşı yardımcı olur. Tam liste için MQTT güvenlik en iyi uygulamaları yazısını okuyun.

Uygulamalar İçin Kapasite Planlaması

Açık olan her uygulama bir bağlantıdır. On cihaz ve elli aktif uygulama kullanıcısı, tepe anında on değil altmış eşzamanlı bağlantı eder. ConnectMQ Serverless (Free) 25'e kadar bağlantıya izin verir; bu da geliştirme ve küçük bir beta için uygundur. Serverless (Paid) QoS 2 ve shared subscription ile 1.000 bağlantıya kadar çıkar; dedicated kümeler daha büyük kitleleri karşılar. Uygulamalar arka planda bağlantıyı kestiği için eşzamanlı bağlantılar genellikle kurulum sayısından çok daha azdır, ancak tahmin etmek yerine gerçek deseninizi ölçün.

Bu planların ardındaki barındırma seçenekleri için bulut MQTT broker rehberine bakın.

Uygulamanızı ConnectMQ'ya Bağlayın

app.connectmq.com adresinde kredi kartı olmadan ücretsiz bir Serverless broker oluşturun, topic'lerinizi tarayıcı içi istemcide test edin ve MQTT.js örneğini yeni uç noktanıza yönlendirin. ConnectMQ, ilk dakikadan itibaren mobil istemcilere hazır TLS ve Secure WebSocket uç noktalarına sahip yönetilen bir MQTT broker'dır.

Sık Sorulan Sorular

Bir mobil uygulama MQTT bağlantısını arka planda açık tutabilir mi?

Güvenilir şekilde tutamaz. Mobil işletim sistemleri arka plandaki soketleri askıya alır; bu yüzden uygulama ön plandayken MQTT'yi, arka plan uyarıları için platform push bildirimlerini kullanın.

Bir mobil uygulama MQTT için WebSocket mi yoksa TCP mi kullanmalı?

JavaScript tabanlı uygulamalar genellikle /mqtt yoluyla 8084 portunda Secure WebSocket kullanır. Native uygulamalar 8883'te TLS kullanabilir; ikisi de şifrelidir.

Uygulama açıldığında mevcut cihaz durumunu nasıl alırım?

Cihazların durumu retained message olarak yayımlamasını sağlayın. Uygulama abone olduğunda broker en son değeri hemen teslim eder.

Broker kimlik bilgilerini bir mobil uygulamaya gömmek güvenli mi?

Hayır. Sızan bir kimlik bilgisinin tek başına iptal edilebilmesi için oturum açıldıktan sonra backend'inizden kullanıcı başına kimlik bilgileri verin.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.