MQTT client kütüphaneleri arasında seçim yapmak, her MQTT projesindeki ilk gerçek mühendislik kararıdır; yanlış seçim daha sonra yeniden bağlanma hataları, eksik MQTT 5 özellikleri veya kilitlenen bir event loop olarak karşınıza çıkar. Bu rehber Python, JavaScript, Go, Java, C#, Rust, C, mikrodenetleyiciler ve mobil için bakımı süren seçenekleri karşılaştırır ve her biri için ücretsiz broker broker.connectmq.com'a bağlanan minimal bir kod örneği verir. Sonunda hangi kütüphanenin yığınınıza uyduğunu ve karar vermeden önce neleri kontrol etmeniz gerektiğini bileceksiniz.
Bir MQTT Client Kütüphanesi Aslında Ne Yapar?
Bir MQTT client kütüphanesi, ikili protokolü birkaç çağrının arkasına gizler: connect, subscribe, publish, disconnect. Perde arkasında çok daha fazlasını yapar ve kütüphaneler tam da bu gizli işlerde birbirinden ayrılır:
- MQTT 3.1.1 ve daha iyi kütüphanelerde reason code, mesaj süre sonu ve user property gibi MQTT 5.0 özellikleri için paket kodlama ve çözme.
- Broker'ın bağlantının sağlıklı olduğunu bilmesi için keep-alive ping'leri.
- Aktarımdaki QoS 1 ve QoS 2 mesajlarını saklayan ve yeniden bağlantıdan sonra tekrar gönderen QoS durum makineleri.
- Geri çekilme (backoff) ile yeniden bağlanma mantığı ve oturum kalıcı değilse yeniden abone olma.
- TCP, TLS ve WebSocket için taşıma katmanı yönetimi.
- Çalışma ortamınızla thread veya async entegrasyonu: bir arka plan thread'i, bir event loop, goroutine'ler veya callback'ler.
Protokol kodlamasını doğru yapıp yeniden bağlanmaları kötü yöneten bir kütüphane her demoyu geçer ve sahada başarısız olur. Aşağıdaki karşılaştırmayı okurken bunu aklınızda tutun. Broker tarafı hâlâ belirsizse önce bir MQTT broker'ın ne yaptığını okuyun; buradaki her kütüphane sadece bir broker'ın client'ıdır.
MQTT Client Kütüphaneleri Nasıl Değerlendirilir?
Dil fark etmeksizin herhangi bir kütüphaneyi benimsemeden önce bu kontrol listesini kullanın:
- Bakım. Son sürümlere ve issue'ların nasıl ele alındığına bakın. MQTT'nin kendisi kararlıdır, ancak TLS yığınları, çalışma ortamları ve platformlar sürekli değişir.
- Protokol sürümü. MQTT 5'e ihtiyacınız var mı? Paylaşımlı abonelikler, mesaj süre sonu, request/response ve ayrıntılı reason code'lar yalnızca orada vardır.
- Taşıma katmanları. Tarayıcılar WebSocket'e ihtiyaç duyar; sıkı denetlenen kurumsal ağlar genellikle 443 benzeri portlarda WSS gerektirir; cihazlar genellikle 8883'te TLS ister.
- Eşzamanlılık modeli. Callback tabanlı, thread tabanlı veya async/await. README'de en kısa görüneni değil, kod tabanınızın geri kalanıyla uyumlu olanı seçin.
- Yeniden bağlanma ve çevrimdışı tamponlama. Otomatik olarak yeniden bağlanıyor mu? Çevrimdışıyken publish'leri kuyruğa alıyor mu ve bu kuyruğun bir sınırı var mı?
- Aktarımdaki mesajların kalıcılığı. Yalnızca bellekte mi, yoksa dosya destekli mi? Bu, süreç yeniden başlatmalarında QoS 1 ve 2 için önemlidir.
- Kaynak ayak izi. Mikrodenetleyicilerde RAM ve flash her şeyi belirler; sunucularda ise nadiren önemlidir.
- Lisans. Popüler kütüphanelerin çoğu EPL/EDL, MIT veya Apache 2.0 kullanır, ancak ticari bir ürün yayımlamadan önce kontrol edin.
Bir Bakışta MQTT Client Kütüphaneleri
| Dil / platform | Kütüphane | MQTT 5 | Model | Uygun olduğu alan |
|---|---|---|---|---|
| Python | paho-mqtt 2.x | Evet | Arka plan thread'i veya manuel döngü | Betikler, gateway'ler, Raspberry Pi |
| Python | aiomqtt | Evet | asyncio | Async servisler, FastAPI backend'leri |
| JavaScript / TypeScript | MQTT.js 5.x | Evet | Event emitter, promise'ler | Node.js ve tarayıcılar (WebSocket) |
| Go | Eclipse Paho Go (paho.mqtt.golang) | Hayır (3.1.1) | Token'lar, goroutine'ler | Olgun 3.1.1 servisleri |
| Go | Eclipse Paho paho.golang | Evet | Context tabanlı | Yeni MQTT 5 servisleri |
| Java / Kotlin | Eclipse Paho Java (mqttv3, mqttv5) | Evet (v5 paketi) | Senkron ve asenkron client'lar | JVM backend'leri, Android |
| Java / Kotlin | HiveMQ MQTT Client | Evet | Bloklayan, async, reaktif | Reaktif JVM yığınları |
| C# / .NET | MQTTnet | Evet | async/await | ASP.NET Core, MAUI, Unity |
| Rust | rumqttc | Evet | async (tokio) veya senkron | Edge servisleri, gateway'ler |
| C | Eclipse Paho C, libmosquitto | Evet | Senkron ve asenkron | Linux cihazları, native uygulamalar |
| Arduino / ESP32 | PubSubClient, AsyncMqttClient | Hayır (3.1.1) | Döngü tabanlı / async callback'ler | Mikrodenetleyiciler |
| ESP-IDF | esp-mqtt | Evet | Event handler | Production ESP32 firmware'i |
| Swift | CocoaMQTT | Evet | Delegate / closure'lar | iOS ve macOS uygulamaları |
| Dart / Flutter | mqtt_client | Hayır (3.1.1) | Stream'ler | Çapraz platform mobil |
Tablo, kütüphanelerin yazının hazırlandığı tarihteki belgelenmiş yeteneklerini yansıtır. Özellikle MQTT 5 desteği aşamalı olarak geldiği için her zaman projenin güncel sürüm notlarıyla doğrulayın. eclipse.dev/paho adresindeki Eclipse Paho proje sayfası, Paho ailesi için iyi bir başlangıç noktasıdır.
Python: paho-mqtt ve aiomqtt
paho-mqtt, Python için varsayılan seçimdir ve Raspberry Pi'den container'a kadar neredeyse her yerde çalışır. 2.x sürümü geriye dönük uyumsuz bir değişiklik getirdi: bir callback API sürümü geçmeniz gerekir ve v2 callback'leri reason code ile property'leri alır. "Çalışmıyor" şikâyetlerinin çoğu 1.x örneklerini 2.x kurulumuna kopyalamaktan kaynaklanır; bu konu paho-mqtt 2.0 CallbackAPIVersion çözümü yazımızda ayrıntılı olarak ele alınıyor.
import uuid
import paho.mqtt.client as mqtt
TOPIC = "connectmq/demo/k3x8p1/libs/python"
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code)
client.subscribe(TOPIC, qos=1)
client.publish(TOPIC, "hello from paho-mqtt", qos=1)
def on_message(client, userdata, msg):
print(msg.topic, msg.payload.decode())
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=f"libs-py-{uuid.uuid4().hex[:8]}",
protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_message = on_message
client.tls_set()
client.connect("broker.connectmq.com", 8883, keepalive=30)
client.loop_forever()
aiomqtt, paho'yu async with ve async for içeren deyimsel bir asyncio API'sine sarar. Servisiniz zaten bir event loop çalıştırıyorsa thread'leri ve coroutine'leri karıştırmak yerine onu kullanın. Ayrıntılı anlatımlar paho-mqtt Python eğitimimizde ve aiomqtt asyncio rehberinde yer alıyor.
JavaScript ve TypeScript: MQTT.js
MQTT.js, Node.js ve tarayıcı için fiilî standart kütüphanedir, TypeScript tipleriyle gelir ve MQTT 5'i destekler. Node.js'te TCP veya TLS üzerinden bağlanır; tarayıcıda WebSocket kullanır, yani değişen tek şey URL şemasıdır.
import mqtt from "mqtt";
const clientId = "libs-js-" + Math.random().toString(16).slice(2, 10);
const topic = "connectmq/demo/k3x8p1/libs/javascript";
// Node.js: mqtts://broker.connectmq.com:8883
// Tarayıcı: wss://broker.connectmq.com:8084/mqtt
const client = mqtt.connect("mqtts://broker.connectmq.com:8883", {
clientId,
protocolVersion: 5,
});
client.on("connect", async () => {
await client.subscribeAsync(topic, { qos: 1 });
await client.publishAsync(topic, "hello from MQTT.js", { qos: 1 });
});
client.on("message", (t, payload) => console.log(t, payload.toString()));
client.on("error", (err) => console.error(err.message));
MQTT.js varsayılan olarak otomatik yeniden bağlanır (gecikmeyi reconnectPeriod kontrol eder). Tarayıcıda bir HTTPS sayfasının yalnızca wss:// bağlantıları açabileceğini unutmayın. Framework'e özgü kalıplar Node.js ile MQTT.js ve JavaScript ile tarayıcıda MQTT yazılarında.
Go: Eclipse Paho
Go'da iki Eclipse projesi vardır. paho.mqtt.golang, çok sayıda production servisinde kullanılan, uzun süredir var olan MQTT 3.1.1 client'ıdır. paho.golang ise yeniden bağlanmayı sizin için yöneten bir autopaho paketi içeren daha yeni MQTT 5 uygulamasıdır. Yeni bir MQTT 5 projesi için paho.golang ile başlayın; geniş 3.1.1 uyumluluğu ve en büyük örnek havuzu için klasik client hâlâ sağlam bir seçimdir.
package main
import (
"crypto/tls"
"fmt"
"math/rand"
"time"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
func main() {
topic := "connectmq/demo/k3x8p1/libs/go"
opts := mqtt.NewClientOptions().
AddBroker("tls://broker.connectmq.com:8883").
SetClientID(fmt.Sprintf("libs-go-%06d", rand.Intn(1000000))).
SetTLSConfig(&tls.Config{MinVersion: tls.VersionTLS12}).
SetAutoReconnect(true)
client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
client.Subscribe(topic, 1, func(_ mqtt.Client, m mqtt.Message) {
fmt.Printf("%s %s\n", m.Topic(), m.Payload())
}).Wait()
client.Publish(topic, 1, false, "hello from Go").Wait()
time.Sleep(2 * time.Second)
client.Disconnect(250)
}
Düzgün kapatma ve yapılandırılmış payload'lar için Go MQTT client'ı geliştirme yazımıza bakın.
Java ve Kotlin: Paho ve HiveMQ Client
Eclipse Paho Java iki paketle gelir: MQTT 3.1.1 için org.eclipse.paho.client.mqttv3 ve MQTT 5 için org.eclipse.paho.mqttv5.client. HiveMQ MQTT Client ise bloklayan, async ve reaktif API'leriyle Reactor veya RxJava kod tabanlarına uyan bir alternatiftir. Her ikisi de Android'de çalışır; Kotlin uygulamalarının bunları doğrudan kullanmasının nedeni budur.
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.UUID;
public class LibsJava {
public static void main(String[] args) throws Exception {
String topic = "connectmq/demo/k3x8p1/libs/java";
String clientId = "libs-java-" + UUID.randomUUID().toString().substring(0, 8);
MqttClient client = new MqttClient("ssl://broker.connectmq.com:8883",
clientId, new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setCleanSession(true);
client.connect(options);
client.subscribe(topic, 1, (t, msg) ->
System.out.println(t + " " + new String(msg.getPayload())));
client.publish(topic, "hello from Paho Java".getBytes(), 1, false);
Thread.sleep(2000);
client.disconnect();
client.close();
}
}
Spring Boot kullanıcıları bunu genellikle Spring Integration ile sarar; kalıplar Java MQTT client rehberimizde ve Kotlin ile Android MQTT eğitiminde yer alıyor.
C# ve .NET: MQTTnet
MQTTnet standart .NET kütüphanesidir ve MQTT 5, TLS ve WebSocket'i destekler. Tamamen async'tir; ASP.NET Core hosted service'lerine, .NET MAUI uygulamalarına ve Unity'ye uyar. Ana sürümlerin farklı olduğuna dikkat edin: 5. sürüm factory'nin adını MqttClientFactory olarak değiştirdi, 4. sürüm ise MqttFactory kullanır. Örnek 5. sürümü hedefler.
using MQTTnet;
using MQTTnet.Formatter;
var topic = "connectmq/demo/k3x8p1/libs/csharp";
var factory = new MqttClientFactory();
using var client = factory.CreateMqttClient();
client.ApplicationMessageReceivedAsync += e =>
{
Console.WriteLine($"{e.ApplicationMessage.Topic} {e.ApplicationMessage.ConvertPayloadToString()}");
return Task.CompletedTask;
};
var options = new MqttClientOptionsBuilder()
.WithTcpServer("broker.connectmq.com", 8883)
.WithClientId($"libs-cs-{Guid.NewGuid():N}"[..16])
.WithProtocolVersion(MqttProtocolVersion.V500)
.WithTlsOptions(o => o.UseTls())
.Build();
await client.ConnectAsync(options);
await client.SubscribeAsync(factory.CreateSubscribeOptionsBuilder()
.WithTopicFilter(topic).Build());
await client.PublishAsync(new MqttApplicationMessageBuilder()
.WithTopic(topic).WithPayload("hello from MQTTnet").Build());
await Task.Delay(2000);
await client.DisconnectAsync();
MQTTnet, düşük seviyeli client'ta kendi kendine yeniden bağlanmaz; bu yüzden bağlantıyı bir döngüye veya bir arka plan servisine sarın. MQTTnet eğitimi, dayanıklı bir hosted service kalıbını gösterir.
Rust: rumqttc
rumqttc en yaygın kullanılan Rust client'ıdır. Client tanıtıcısını, sizin poll ettiğiniz bir event loop'tan ayırır; bu da size geri basınç (back-pressure) üzerinde açık kontrol sağlar. Hem MQTT 3.1.1 hem de MQTT 5 modülleri mevcuttur.
use rumqttc::{AsyncClient, Event, MqttOptions, Packet, QoS};
use std::time::Duration;
#[tokio::main]
async fn main() {
let topic = "connectmq/demo/k3x8p1/libs/rust";
let mut opts = MqttOptions::new("libs-rust-k3x8p1", "broker.connectmq.com", 1883);
opts.set_keep_alive(Duration::from_secs(30));
let (client, mut eventloop) = AsyncClient::new(opts, 10);
client.subscribe(topic, QoS::AtLeastOnce).await.unwrap();
client.publish(topic, QoS::AtLeastOnce, false, "hello from rumqttc").await.unwrap();
loop {
match eventloop.poll().await {
Ok(Event::Incoming(Packet::Publish(p))) => {
println!("{} {}", p.topic, String::from_utf8_lossy(&p.payload));
}
Ok(_) => {}
Err(e) => {
eprintln!("connection error: {e}");
tokio::time::sleep(Duration::from_secs(2)).await;
}
}
}
}
Bir hatadan sonra event loop'u yeniden poll etmek, rumqttc'nin yeniden bağlanma yöntemidir. TLS için TLS feature flag'lerinden biri gerekir; bu kurulum rumqttc rehberinde anlatılıyor.
C ve Gömülü Sistemler: Paho C, libmosquitto, PubSubClient, esp-mqtt
Native Linux uygulamaları için Eclipse Paho C, MQTT 5 desteğiyle senkron ve asenkron API'ler sunar; libmosquitto ise Mosquitto projesinden gelen küçük ve sahada kendini kanıtlamış bir alternatiftir.
#include <stdio.h>
#include <string.h>
#include "MQTTClient.h"
int main(void) {
MQTTClient client;
MQTTClient_connectOptions opts = MQTTClient_connectOptions_initializer;
MQTTClient_message msg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
const char *topic = "connectmq/demo/k3x8p1/libs/c";
char payload[] = "hello from Paho C";
MQTTClient_create(&client, "tcp://broker.connectmq.com:1883", "libs-c-k3x8p1",
MQTTCLIENT_PERSISTENCE_NONE, NULL);
opts.keepAliveInterval = 30;
opts.cleansession = 1;
if (MQTTClient_connect(client, &opts) != MQTTCLIENT_SUCCESS) {
fprintf(stderr, "connect failed\n");
return 1;
}
msg.payload = payload;
msg.payloadlen = (int)strlen(payload);
msg.qos = 1;
msg.retained = 0;
MQTTClient_publishMessage(client, topic, &msg, &token);
MQTTClient_waitForCompletion(client, token, 10000L);
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return 0;
}
Mikrodenetleyicilerde ödünleşimler değişir. PubSubClient küçük ve basittir, ancak yalnızca MQTT 3.1.1'i destekler, QoS 0 ile yayın yapar ve JSON payload'lar için setBufferSize() ile büyütmeniz gereken 256 baytlık varsayılan bir paket tamponuna sahiptir. AsyncMqttClient, bloklamayan bir tasarımla QoS 1 ve 2 yayımlama ekler. Production ESP32 firmware'i için Espressif'in ESP-IDF içindeki esp-mqtt bileşeni MQTT 5, TLS ve WebSocket'i destekler ve çip üreticisi tarafından bakımı yapılır. Çalışan Arduino kodu için ESP32 MQTT eğitimi ile, Linux cihazları için Paho MQTT C ile başlayın.
Mobil: Swift, Kotlin, Flutter ve React Native
Mobil client'lar sunucuların karşılaşmadığı bir kısıtla yüz yüzedir: işletim sistemi arka plandaki uygulamaları askıya alır ve boşta kalan soketleri kapatır. Hangi kütüphaneyi seçerseniz seçin, sık yeniden bağlanmaları planlayın, kaçırılanları yakalamak için kalıcı oturumlar veya retained message'lar kullanın ve uyuyan bir telefona mutlaka ulaşması gereken her şey için push bildirimlerini kullanın.
- iOS / macOS: CocoaMQTT; MQTT 5, TLS ve WebSocket'i destekler. Bkz. Swift ile iOS'ta MQTT.
- Android: Kotlin'den Paho Java veya HiveMQ client'ı, tercihen yaşam döngüsüne duyarlı bir bileşen içinde.
- Flutter:
mqtt_client, tek bir Dart kod tabanından sunucu ve tarayıcı hedeflerini kapsar. Bkz. Flutter MQTT eğitimi. - React Native: Birkaç polyfill ile WebSocket üzerinden MQTT.js yaygın yoldur. Bkz. React Native MQTT.
Kütüphane Hatası Gibi Görünen Tuzaklar
Bir kütüphaneye yüklenen sorunların çoğu aslında yapılandırma veya tasarım sorunlarıdır. Önce bunları kontrol edin:
| Belirti | Gerçek neden | Çözüm |
|---|---|---|
| Sürekli bağlan/kop döngüsü | İki süreç tek bir client ID'yi paylaşıyor | Benzersiz ID'ler üretin; broker eski oturumu düşürür |
| Yeniden bağlantıdan sonra mesaj gelmiyor | Clean session ve yeniden abone olmama | Başlangıçta bir kez değil, connect callback'i içinde yeniden abone olun |
| Event loop donuyor | Mesaj callback'i içinde bloklayan iş | İşi bir kuyruğa, thread havuzuna veya async göreve devredin |
| Büyük payload'lar sessizce düşüyor | Client tamponu veya broker boyut limiti | Client tamponunu büyütün; broker limitlerine uyun |
| Cihazda TLS el sıkışması başarısız | Eksik kök CA veya yanlış saat | CA paketini kurun ve bağlanmadan önce saati NTP ile senkronize edin |
| QoS 1'de yinelenen mesajlar | Beklenen en-az-bir-kez davranışı | Handler'ları idempotent yapın; bkz. MQTT QoS seviyeleri |
Python'da yeniden bağlanma yönetimi özel ilgiyi hak eder; paho-mqtt yeniden bağlanma rehberi backoff ayarlarını açıklar. Bir client'ı yayımlamadan önce sistematik olarak doğrulamak için MQTT client'larını test etme yazımızı okuyun ve hata ayıklarken bağımsız ikinci bir client olarak mosquitto_pub ve mosquitto_sub örneklerini elinizin altında tutun.
Public Broker'dan Kendi Broker'ınıza Geçiş
Yukarıdaki tüm örnekler anonim public broker'ı kullanır; bu, kütüphaneleri yan yana karşılaştırmak için mükemmeldir: Python abonesini çalıştırın, Go'dan yayın yapın, mesajın gelişini izleyin. Ancak public MQTT test broker'ı paylaşımlıdır ve herkes tarafından okunabilir; bu yüzden production client'larının kimlik bilgilerine ve izole bir broker'a ihtiyacı vardır.
ConnectMQ, bu rehberdeki her kütüphaneyle çalışan tam yönetilen bir MQTT servisidir; çünkü TCP 1883, TLS 8883, WebSocket 8083 ve Secure WebSocket 8084 (yol /mqtt) üzerinden standart MQTT 3.1.1 ve 5.0 konuşur. Portalda bir broker oluşturduğunuzda bir kullanıcı adı, parola ve client ID alırsınız. Yukarıdaki herhangi bir örneği geçirmek üç satırlık bir değişikliktir; işte paho-mqtt için:
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID", protocol=mqtt.MQTTv5)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()
ConnectMQ, client ID'leri verilen kimlik bilgilerine bağlar; bu yüzden üretilen ID'yi tam olarak verildiği gibi kullanın. Broker'ınızı nasıl barındıracağınıza hâlâ karar veriyorsanız, bulut MQTT broker seçenekleri rehberimiz serverless, dedicated ve kendi bulutunuzu getirme (BYOC) seçeneklerini karşılaştırır.
Her MQTT Kütüphanesini ConnectMQ'ya Bağlayın
Yığınınıza uyan kütüphaneyi seçin, örneğini broker.connectmq.com üzerinde çalıştırın ve özel topic'lerin zamanı geldiğinde app.connectmq.com adresinden ücretsiz bir broker oluşturun. Serverless ücretsiz plan kredi kartı gerektirmez; 25 bağlantıya kadar, QoS 1'e kadar ve 256 KB mesaj boyutu sunar. Bu, aynı anda birkaç dilde client geliştirmek ve test etmek için fazlasıyla yeterlidir.
Sık Sorulan Sorular
En iyi MQTT client kütüphanesi hangisi?
Tek bir en iyi yoktur; doğru seçim, dilinize ve eşzamanlılık modelinize uyan, bakımı süren kütüphanedir. Python için paho-mqtt, JavaScript için MQTT.js, .NET için MQTTnet, Go ve Rust için de Paho veya rumqttc yaygın ve iyi desteklenen varsayılanlardır.
Tüm MQTT client kütüphaneleri MQTT 5'i destekler mi?
Hayır. Arduino için PubSubClient ve klasik Paho Go client'ı dahil birçok popüler kütüphane yalnızca MQTT 3.1.1'i uygular. Paylaşımlı aboneliklere, mesaj süre sonuna veya reason code'lara ihtiyacınız varsa, bir kütüphaneyi benimsemeden önce MQTT 5 desteğini doğrulayın.
Farklı dillerde yazılmış client'lar birbiriyle konuşabilir mi?
Evet. Broker dil nesnelerini değil baytları yönlendirir; bu yüzden topic'ler ve payload formatı üzerinde anlaştıkları sürece bir Python yayıncısı ile bir C# abonesi birlikte çalışır. Başlamak için en kolay ortak format JSON'dur.
Tarayıcıda hangi kütüphaneyi kullanmalıyım?
Secure WebSocket üzerinden MQTT.js standart seçimdir. wss://broker.connectmq.com:8084/mqtt adresine bağlanın; çünkü tarayıcılar ham TCP soketleri açamaz ve HTTPS sayfaları güvensiz WebSocket bağlantılarını engeller.
Client'ım neden public broker'da çalışıp özel bir broker'da çalışmıyor?
Genellikle nedeni eksik kimlik bilgileri, verilenle eşleşmeyen bir client ID veya etkinleştirilmemiş TLS'tir. Kütüphanenizin bildirdiği CONNACK reason code'unu kontrol edin; bunlardan hangisinin yanlış olduğunu tam olarak söyler.



