Antes de empezar el texto, debo agradecer al internauta "Xiaolong" y a los internautas del grupo emqtt.io por su ayuda, acabo de empezar a usar MQTT. Hay muchas cosas que no entiendo, cuando pregunté por la solución en el grupo de emqtt.io, "Xiaolong" me dio una explicación detallada de algunos puntos de conocimiento sobre MQTT y ofreció soluciones, muchas gracias. Creo que algunas de las cosas mencionadas siguen siendo muy útiles para principiantes, así que aquí tienes un resumen de mi historial de chats con "Xiaolong" para tu referencia.
Pregunta 1: Si el MCU tiene caché y potencia de procesamiento limitadas, es imposible enviar mensajes de una vez, ¿cómo publicar mensajes a través de MQTT en este caso? Primero, ensamblar la cabecera del protocolo publicación, escribir la longitud de la carga útil en él, enviarla a través de TCP y luego enviar la carga útil poco a poco. Si no puedes obtener la longitud total de la carga útil, esto es difícil. Como envías un informe de protocolo de publicación, después de que el servidor lea la longitud de la carga útil en el cabezal, seguirá leyendo hasta alcanzar la longitud requerida, y entonces se cuenta la publicación. Por lo tanto, primero confirmas la longitud del contenido que publicas, luego agrupas la cabecera del paquete de publicación, rellenas la longitud de la carga útil, tcp:send(head), y después envías la carga útil una por una, como 1k cada vez, o enviar los datos según el TCP normal, y enviarlos hasta el final, incluso si la publicación ya ha terminado. El siguiente envío pertenece a la capa TCP, y no necesitas intervenir. Si en la capa TCP falla el envío, debe haber un problema con el socket, la conexión está rota, tienes que volver a conectar al servidor MQTT; si no termina, la sesión del servidor también terminará, es decir, el servidor no ha recibido los datos. Reconectar, tienes que reenviar el mensaje, mientras esté desconectado, tienes que reconectarte, si quieres reenviar los datos depende de si has guardado los datos anteriores. Además, si el mensaje es importante, puedes usar qos=1 o 2 para asegurarte de que el servidor reciba el mensaje, qos=1 requiere un viaje de ida y vuelta, qos=2 necesita cuatro viajes de ida y vuelta, qos=0 es muy sencillo, mientras lo envíes, no importa.
Pregunta 2: ¿Existen muchos recursos de código abierto para MQTT?
El inicio de sesión del hipervínculo es visible.Hay muchos
Pregunta 3: ¿Por qué MQTT generalmente no proporciona funciones de persistencia?
El protocolo MQTT está diseñado según el diseño en línea del dispositivo, y los datos se almacenan en memoria
Pregunta 4: ¿Consume la memoria MQTT?
MQTT consume más memoria, y los datos medidos de emqtt son: 38W, la memoria representa 14G, CPU el 15%
Pregunta 5: ¿Cuál es la relación entre la sesión y el cliente?
Por ejemplo, si tienes una placa, como cliente, inicia una solicitud de conexión MQTT para conectarse al servidor MQTT, por ejemplo, es un servicio EMQTT; tras recibir la solicitud de conexión de esta placa, el servidor EMQTT establecerá una conexión TCP con la placa en la capa TCP, y dentro de EMQTT se generará un proceso para comunicarse con esta placa, y también se generará un proceso llamado sesión. Esta sesión es un tema especializado en gestionar la suscripción de este tablero, y otros consejos también lo enviarán a la sesión correspondiente si publican el tema de interés para este tablero; si esta sesión recibe el tema suscrito y descubre que el cliente sigue vivo, enviará los datos a través de este cliente a través de TCP a este tablero; si se detecta que el cliente ya no está, es decir, el tablero y el servidor están rotos. Luego la sesión guardará primero el tema de suscripción recibido en la sesión, y la próxima vez que el tablero esté conectado y cleansession=false, entonces la sesión no se limpiará, y al conectarse esta vez, el mensaje de suscripción recibido previamente se enviará al tablero, que probablemente sea lo que significa.
Pregunta 6: ¿Cómo sabe emqtt que el cliente conectado es el mismo?
Al conectar, necesitas establecer un ID de cliente, este ID puede quedar sin activar; si no se activa, se generará automáticamente un ID único en el lado del servidor emqtt; si quieres usar sesión, debes tener un ID único, puedes usar IMEI. Si debes recibir mensajes offline, debes usar un ID definido.
Pregunta 7: ¿Se puede modificar la hora de la sesión de emqtt?
Puedes cambiar la hora de la sesión, ahora son 48 horas, puedes cambiarla a una semana, si quieres que sea permanente, me temo que EMQTT no es adecuado.
Pregunta 8: ¿El permiso de acceso de emqtt está escrito en el archivo de configuración?
etc/acl.config
Pregunta 9: ¿Cuál es la distribución de emqtt?
Distribuido simplemente significa conectar varios de tus servidores, uno o más de ellos, mientras no estén todos rotos, emqtt puede funcionar normalmente. Los datos EMQTT se comparten entre varios nodos, y si hay un problema con un nodo, los datos no se perderán, pero sí los datos de sesión en ese nodo.
|