Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Evitar acumulación de datos en el Buffer
#1
Hola comunidad,
Estoy tratando de enviar datos continuamente a un código en python. Usé sockets udp para enviar los datos. La tasa de envío es más rápida que la tasa de recepción. Cuando detengo el envio de datos, durante un tiempo sigo recibiendo datos. Esto me imagino será porque el buffer está lleno y hasta que no se vacié no deja de recibir. ¿Cómo puedo evitar esto o como puedo recibir solo los datos más recientes?

Este es mi código. Cuento con una clase para inicializar el socket y luego con un método para recibir los datos.
Código:
import socket
#import sys

class ReceptorUDP(object):

    buffer_Size=502
   
    def __init__(self,address):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock.bind(address)
       
        print("Sockets up ... OK")
   
    def recibirDatos(self):
       
        print('\nwaiting to receive message')
        while True:
            data, address = self.sock.recvfrom(self.buffer_Size)
            if not data:
                break
            print('received {} bytes from {}'.format(
            len(data), address))
            return data
           
           
       
       


       
Gracias de antemano!
Responder
#2
Hola. La respuesta rápida es que no se puede. Los datos que recibís del socket siempre se reciben en el orden en que fueron enviados. Para llegar a lo último que envió el cliente, tenés que leer todo lo anterior. Pero si llegado un momento ya no te interesa leer datos, simplemente dejá de llamar a recvfrom(). Esto no soluciona el problema del todo porque recvfrom() es una función que bloquea la ejecución del código; esto es, se queda esperando que ingrese información del socket y no retorna hasta entonces, por lo cual resulta complicado detener la ejecución. Para sortear este problema deberías usar herramientas non-blocking como asyncio o twisted.

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)