[mqtt - enhancement] setting up sock read() chunk size
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- embedded-iot, networking
Línea de trabajo
Comienza localizando la implementación de MQTT y la ruta de lectura del socket utilizada para los mensajes entrantes. Revisa cómo se entregan los fragmentos de mensajes al callback y cómo se gestionan las cargas útiles grandes. Se considera terminado cuando se haya acordado e implementado un tamaño de lectura acotado sin romper la semántica del callback ni la entrega completa de la carga útil de MQTT.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Im encountering an issue, while transmitting large data (eg. files, ~50kb) over MQTT. The first transmission works flawlessly, but then the ESP has problems to allocate enough heap for further large transmissions in receiving. Blog posts depicts that the problem could be, that the heap is fragmentet after some allocations.
My solution here was to setting up a max chunk size for the read() command, e.g. 1024 byte (multiple of four, to retain the possibility to decode base64 encoded data).
max_size = 1024
left_size = sz
while left_size > 0:
r = min(max_size, left_size)
msg = self.sock.read(r)
left_size -= r
self.cb(topic, msg, (r<max_size))
The additional bool argument for the callback indicates the completeness of the transmission.
Peter Hinch already mentioned to me (in general) a better solution: send multiple short messages or use an device with SPIRAM. Im not entirely sure if this would fit in my situation, where i publish files via MQTT to update these in the filesystem. So at least I wanted to share my results here once again.
Inadvertent i've initially opened this issue under the mqtt repo of @peterhinch (whoops, that was probably a case of mental derangement, im sorry for that). Here was the intended place.
- Lenguaje dominante
- Python
- Estrellas
- 2.9k
- Forks
- 1.1k
- Merge medio
- 7 d 6 h
- PR fusionados (30 d)
- 3
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de micropython/micropython-lib
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
micropython/micropython-lib#1074 ·
-
needs-info
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
micropython/micropython-lib#943 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
micropython/micropython-lib#931 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
micropython/micropython-lib#795 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
micropython/micropython-lib#762 ·
Todos los issues de micropython/micropython-lib
Issues similares
-
sponsored
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
opensubtitlescom: moviehash never sent when opensubtitles (.org) is not in the provider list Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Diaoul/subliminal#1382 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
triage/confirmed
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
agentscope-ai/agentscope#2775 ·
-
worker.gpuVendors silently accepts unsupported/misspelled vendor names — no validation guard Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100