Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 2207 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á 2207 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.