Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 2304 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá!

Gostaria de entender/saber o motivo de existir um Critical Section no método TDFeSSL.Enviar. Segue trecho do código:

      HttpSendCriticalSection.Acquire;
      try
        Result := FSSLHttpClass.Enviar(ConteudoXML, AURL, ASoapAction, AMimeType);
      finally
        HttpSendCriticalSection.Release;
      end;

Da forma como está não é possível realizar envios simultâneos. Questiono isso pois tenho clientes que possuem muitos PDVs realizando vendas simultaneamente e acaba criando um gargalo de envios, pois um fica aguardando o outro, afetando também o timeout de resposta.

Existe a possibilidade de remover esse Critical Section ou é alguma limitação/problema que ainda precisa ser resolvido? Se alguém puder me dar maiores detalhes, agradeço.

Postado (editado)

Daniel,

Está em ambos os casos: com e sem a configuração TimeOutPorThread. Inclusive essa parte do código que postei é no ELSE da verificação do TimeOutPorThread.

Editado por rhuanrc
  • Fundadores
Postado

 

35 minutos atrás, rhuanrc disse:

Questiono isso pois tenho clientes que possuem muitos PDVs realizando vendas simultaneamente e acaba criando um gargalo de envios, pois um fica aguardando o outro, afetando também o timeout de resposta

Mesmo que você use um concentrador de envio... (onde todos os PDVs se conectam)... O CriticalSection é ainda mais importante, nesse cenário...

Caso contrário, as propriedades do Objeto ACBrNFe, seria compartilhada (e modificada) por diversas conexões... e você poderia ter respostas erradas, pois foram "contaminadas" por uma segunda chamada ao mesmo método..

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Entendo, mas no caso do nosso concentrador é criada uma instância do objeto ACBrNFe para cada envio realizado, então os recursos não estariam compartilhados. Posso estar enganado, mas o Critical Section impede o acesso àquele bloco de código independente de quem está acessando.

  • Fundadores
Postado

Faça uma experiência com TimeOutPorThread ligado... pois nesse caso, será criada uma nova instância de HTTPClass em TDFeSendThread.Create

  FSSLHttp      := SSLHttpClass.Create(ADFeSSL); 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Já utilizo o TimeOutPorThread em alguns clientes e notei esse mesmo comportamento de "bloqueio". A execução da TDFeSendThread também possui a Critical Section. A variável HttpSendCriticalSection é global e criada no initialization da unit (o que está correto). A seção crítica impede que qualquer outra thread acesse o envio. Acredito que no caso da TimeOutPorThread estar ativa a Critical Section é interessante (não tenho certeza, teria que fazer mais testes), mas quando está desativada não vejo motivo.

  • Fundadores
Postado
13 minutos atrás, rhuanrc disse:

mas quando está desativada não vejo motivo.

O motivo é evitar que duas threads tentem fazer uso simultâneo do mesmo objeto (FSSLHttpClass)

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Então mesmo que eu tenha duas instâncias de ACBrNFe, criadas em threads separadas, as duas não podem realizar envios ao mesmo tempo porque o objeto FSSLHttpClass possui métodos que não podem ser acessados simultaneamente?

Postado

Vou realizar alguns testes sem as seções críticas e verificar o comportamento. Apenas levantei esse questionamento para entender,  porque o comentário do SVN que implementou essa alteração (Revision 15240) cita que foi adicionado isto para evitar A.V. em algumas situações, mas não cita quais e não tem nenhum tópico referente ao problema.

Citar

-- ACBrDFeSSL --
[-] Ajuste em TDFeSendThread, para evitar A.V. em algumas situações
    (por: DSA)

Obrigado pelos esclarecimentos, Daniel.

  • 2 semanas depois ...
Postado

Perfeito, Daniel! 

Fiz os testes com a mudança de visibilidade do HttpSendCriticalSection e funcionou bem. Acredito que resolva a questão da concorrência de envios que citei em minha dúvida inicial.

  • Administradores
Postado

Bom dia.

Conforme postagem no tópico relacionado, as alterações já estão no svn.

Att.

  • Obrigado 1
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 2304 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...