Árvore de páginas

Quando configuramos a infraestrutura do REST no INI do appserver, podemos criar diversos Thread Pools, ou seja, conjuntos de threads disponíveis para o atendimento das requisições HTTP.

Porém, como é decidido qual thread de fato irá atender a requisição HTTP é algo que pode ser modificado. A camada tlppCore tem seu algoritmo de distribuição das conexões, porém não é o foco desse documento explicar como funciona, e sim ensinar como modificar esse algoritmo.

Importante ressaltar que ele te servirá não somente para modificar o algoritmo, mas dará o poder de decidir se a requisição será atendida ou não, se a conexão deve ser encerrada imediatamente e até decidir que a partir de certo momento, o tlppCore utilize o algoritmo padrão.

Basicamente, essa função tem que retornar o valor do índice correspondente ao Slave para o qual deseja indicar como responsável pelo atendimento da requisição HTTP.

O índice pode ser encontrado buscando pela lista (array) retornado pelo método oRest:getThreadPoolSlaves(), ficando a critério de quem implementa o algoritmo de busca e escolha.

Logo mais a baixo, iremos detalhar as demais opções e suas finalidades na sessão de retorno.


Parâmetros

A função customizada recebe 3 (três) parâmetros, sendo:

1 - cClassName

Nome da classe que foi implementada para a execução quando requisitado a "endpoint" correspondente do serviço REST. (pode estar em branco)

2 - cFunctionName

Nome da função ou do Método que foi implementado para a execução quando requisitado o endpoint correspondente do serviço REST.

3 - cProgramType

Tipo do programa, sendo:

Valor = 1 - Implementação do endpoint do serviço REST através de endpoint.

Valor = 2 - Implementação do endpoint do serviço através do callback de LoadURN. (descrito em documento próprio)

Nota: Embora não seja esse o momento de executar cada método ou função, saber quem será executado é importante, pois pode-se nessa camada implementar a validação de controle sobre autenticação X permissão de acesso por rotina a ser executada, concedendo mais poder a esse Callback

Retorno

O retorno dessa função deve ser do tipo numérico, indicando o índice correspondente do Slave contido na lista em oRest:GetThreadPoolSlaves() na qual deseja que a Thread seja responsável pelo atendimento da requisição.

Pode-se retornar as seguintes opções:

  • Maior que 0 (zero) >> Índice do slave para qual deseja transferir a responsabilidade de atendimento.

  • -1 >> Indica que deseja que o algoritmo do tlppCore seja o responsável pela escolha

  • -2 >> Indica que não irá atender a essa requisição, porém deixa que o server responda para o cliente requisitante.

  • -3 >> Derruba a conexão de modo silencioso, sem dar resposta para o cliente requisitante. Ex: útil para quando detectar tentativa de invasão.


Exemplo

function restGrader( cClassName as character, cFunctionName as character, cProgramType as character ) as integer

   Local nIndex   := -1 as integer
   local aSlaves   := oRest:GetThreadPoolSlaves() as array
   local nA       := 0 as integer

   for na := 1 to len(aSlaves)
       if ( aSlaves[nA]:ID == 6 ) // logica qualquer
           nIndex := nA
       endif
   next

return nIndex
  • Sem rótulos