Como definir um timeout para o listener do seu cliente Socket.io

Olá!

[English Version]

Então eu esbarrei em um problema com o módulo socket.io-client onde você não pode definir timeout para listeners, então se por exemplo você fez isso em seu código:


 socket_client.on ("my_event", (resposta) => {
   
    console.log ("Evento respondido");
   
});

Não há propriedades que você possa passar (até onde eu olhei, eu sei que há tickets abertos sobre isso) para timeout deste listener, então se você tiver um cliente de longo tempo conectado, ele experimentará um aumento de memória. Não é um vazamento de memória, os objetos estão realmente esperando para entrar em ação, mas pode haver uma situação em que um erro ocorreu e seu listener permanecerá lá para sempre até que você pare o processo.

Então, para atenuar isso, você poderia adicionar ao seu código esta função muito simples:


var addListener = (socket_client, eventName, 
                  callback, timeout)=>{

    // Adicionando o ouvinte de evento como
    // você normalmente faria

    socket_client.on(eventName,callback);

    // Se o ouvinte ainda não estiver limpo
    // após o tempo limite, isso fará o truque

    setTimeout(()=>{

      if(socket_client.hasListeners(eventName)){

        socket_client.removeListener(eventName, callback);

        console.log(eventName + " listener was cleaned");

      }

    }, timeout);

  }

Obrigado.

Advertisements

One thought on “Como definir um timeout para o listener do seu cliente Socket.io”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s