Atribui um valor máximo de espera (ou timeout) para a recepção de repostas de comandos vindas do servidor.

Sintaxe

oRedisAfter := oRedisClient:SetRecvTimeout(nTimeInSeconds)

Parâmetros

NomeTipoDescriçãoObrigatórioReferênciaObservações
nTimeInSeconds
numérico

Número de segundos máximo a esperar; frações de segundo podem ser usadas

X

Retorno


Observações

  • Caso o método ::SetRecvTimeout() receba como parâmetro um valor inadequado de tempo de timeout, negativo ou nulo, o valor anterior não será alterado, e nem haverá indicação de erro.

  • O método ::SetRecvTimeout() altera diretamente o valor da propriedade ::nTimeout.  Apenas ele pode alterá-la;

  • O método ::SetRecvTimeout() é muito importante para aplicações críticas que dependam de tempo de resposta preciso; isto é: quanto o tempo o servidor Redis levará para responder.

  • ::SetRecvTimeout() também é útil para uma aplicação que interaja com um servidor Redis ou muito ocupado, ou muito instável, pois permite ajustar o limite máximo de tempo que o cliente poderá aguardar por uma resposta, antes de considerar que ela não virá;

  • A chamada método ::SetRecvTimeout() não gera um valor específico de resultado, e isto é indicado pelo valor negativo na propriedade ::nReplyType do objeto através tRedisClient do qual foi chamado.

    Em vez disso ::SetRecvTimeout() retorna o próprio objeto tRedisClient sobre o qual foi chamado.

  • Para avaliar o efeito de ::SetRecvTimeout(), e confirmar sua ação, deve-se consultar a propriedade ::nTimeout;

  • Caso o servidor não responda um comando emitido pelo cliente em um tempo (em segundos) menor do que o valor especificado em ::SetRecvTimeout(), o comando retornará com erro e essa informação será registrada na propriedade ::lOk, que conterá .F.

Exemplos

Exemplo 1 - uso básico de ::SetRecvTimeout()

#include 'protheus.ch'
   
// Setup Redis
Static cRedisHost := "localhost"
Static nRedisPort := 6379
Static cRedisAuth := ""
   
User Function SetTout()
  Local oRedisClient := Nil
  Local retVal       := Nil
  
  oRedisClient := tRedisClient():New()
  oRedisClient:Connect(cRedisHost, nRedisPort, cRedisAuth)

  VarInfo('oRedisClient after Connect()', oRedisClient)
  ConOut("Value of ::nTimeout: " + cValToChar(oRedisClient:nTimeout)) 
  
  If oRedisClient:lConnected
    ConOut("Successful connection.")
  
    // Set timeout of server answers to 10 seconds
    ConOut("Will set timeout to 10 seconds")
    retVal := oRedisClient:SetRecvTimeout(10)
    
    VarInfo('Result of ::SetRecvTimeout()', retVal)
    ConOut("Value of ::nTimeout: " + cValToChar(oRedisClient:nTimeout)) 
 
    // TODO Redis store manipulation commands
    
    oRedisClient:Disconnect()
    ConOut("The client was disconnected from the server.")
 
    Return .T.
  EndIf
  
Return .F.

A função de usuário SetTout()  mostra a ação de ::SetRevTimeout() de duas formas: a listagem dos atributos do objeto tRedisClient através de VarInfo(), e através da impressão direta da propriedade ::nTimeout.