Ir para conteúdo
  • Cadastre-se

dev botao

Tempo de Transmissão da NFC-e


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

Recommended Posts

Colegas após muita reclamação dos nossos clientes ref tempo de transmissão e não encontrarmos solução, resolvemos convidar algumas softhouse de amigos da região para um comparativo de tempo de transmissão.

pegamos seis maquinas com a mesma configuração, e sistema com 4 linguagem distintas
sistemas feitos em delphi com ACBR , usamos 3 sistema distintos para caso houvesse um disparate de tempo concluir que a causa seja a concepção do código.
3 que não usam o ACBR (1 C# - 1 vbNET - 1 PHP)

todos com a mesma logica e o mesmo banco de dados Firebird

1 Gera o XML
2 grava a nfc no banco de dados
3 Transmite

3 itens cada nfc

Internet com 5MB exclusiva

fizemos os testes em dois periodos sempre usando o mesmo ponto de internet uma maquina por vez.

9:00 da manhã e 4:30 da tarde

os que usam acbr

manhã chegou a variar de 12 segundos a 0:01:10 e a tarde 12 segundos não houve nenhum disparate de tempo entre sistema

os que não usam o acbr

manhã 5 segundos e tarde 3 segundos.

==================================

Pergunto para os colegas mais experiente

estes tempos gasto pelos sistema feitos em Delhi com ACBr seria +- o tempo que gastam o sistema de vocês
para transmitir a NFC-e?

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

@Arnaldo Cruz

Bom dia,

Sua comparação é bem oportuna mas requer um pouco mais de detalhes do ambiente em que foi feito tal comparação, principalmente no que diz respeito ao ambiente usando o ACBr.

Pode nos dizer qual AMBIENTE foi aplicado os testes?

  1. Produção ou Homologação?
  2. Qual o certificado utilizado?
  3. Qual SEFAZ aplicou os testes?
  4. Qual seu ambiente de desenvolvimento? Delphi se sim qual versão?
  5. Qual sistema operacional?
  6. Qual antivirus?
  7. Qual HD (Solido ou Disco)?

Tudo isso influencia no resultado final.

 

Se está disposto a nos por nesse jogo faça um teste por favor:

Ativa a diretiva USE_MINGW e segue as dicas de como utilizar:

http://www.projetoacbr.com.br/forum/search/?q=USE_MINGW+

 

Citar

// Ative a diretiva abaixo, para usar a Libxml2, libxslt, libxmlsec compilada
// com MinGw ftp://ftp.zlatkovic.com/libxml/64bit/
{$DEFINE USE_MINGW}
{$IfDef CPU64}
 {$DEFINE USE_MINGW}
{$EndIf}

 

Apliquei uma alteração na unit ACBrDFeOpenSSL onde ativei o KeepAlive.

Segue unit para teste: 

ACBrDFeOpenSSL.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  1. Produção ou Homologação? >>>>>>>.Produção
  2. Qual o certificado utilizado? >>>>>>>>A1
  3. Qual SEFAZ aplicou os testes?>>>>>>PB
  4. Qual seu ambiente de desenvolvimento? Delphi se sim qual versão?>>>>>> Delphi XE7
  5. Qual sistema operacional?  >>>>> Win7 64bits processador I7
  6. Qual antivirus? >>>>>>>Avast
  7. Qual HD (Solido ou Disco)? >>>>>>500GB

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

@Arnaldo Cruz

Ajuste o KeepAliveTimeout de 300 para 100 e faça os testes.

Aqui estou conseguindo autorizações em torno de 4 a 5 segundos.

  1. Produção ou Homologação? >>>>>>>.Homologação
  2. Qual o certificado utilizado? >>>>>>>>A1
  3. Qual SEFAZ aplicou os testes?>>>>>>MT
  4. Qual seu ambiente de desenvolvimento? Delphi se sim qual versão?>>>>>> Delphi Berlin 10.2
  5. Qual sistema operacional?  >>>>> Win10 64bits processador I7
  6. Qual antivirus? >>>>>>>Windows Defender
  7. Qual HD (Solido ou Disco)? >>>>>>SSD 240GB

O que é Connection Keep-alive?

http://pt.stackoverflow.com/questions/78317/o-que-é-connection-keep-alive

Em outras liguagens esse recurso é padrão e como synapse é antiga precisa ser ativada.

Citar
Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Propriedade HttpWebRequest.KeepAlive

.NET Framework (current version)
 
 

Obtém ou define um valor que indica se é necessário fazer uma conexão persistente com o recurso da Internet.

Namespace:   System.Net
Assembly:  System (em System.dll)
 

 

Sintaxe
 
 
 

public bool KeepAlive { get; set; }

Valor da Propriedade

Type: System.Boolean

true se a solicitação para o recurso de Internet deve conter um cabeçalho HTTP Connection com o valor keep-alive; caso contrário, false. O padrão é true.

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Oi @Arnaldo Cruz

Veja primeiro a explicação do que é Keep Alive

Citar
6votar contraaceitos

Uma conexão Keep-Alive significa uma conexão persistente, Ou uma conexão de vida persistente, entre o cliente e o servidor. Impedindo que a conexão se quebre de forma intermitente.

A conexão HTTP padrão geralmente é fechada após cada pedido tenha sido concluída, o que significa que o servidor fecha a conexão TCP após a entrega da resposta. A fim de manter a conexão aberta para várias solicitações, o cabeçalho de conexão keep-alive pode ser usado.

Na imagem fica claro como o keep alive funciona.

Citar

Vantagens:

  • Aumenta a velocidade do website: Redução na latência em transferências HTTP.
  • Reduz uso da CPU: Considere que o website tenha varias imagens, arquivos, será necessário uma conexão para cada arquivo, aumentando o uso da CPU, usando keep-alive, somente é feita uma conexão, assim reduzindo o uso da CPU.

Desvantagens

  • Aumenta o uso de memória: Ativar o KeepAlive aumenta o uso de memória no servidor. Processos do Apache tem que manter conexões abertas à espera de novos pedidos de conexões estabelecidas.

Referências:

W3
MaxCDN
Varvy
Abdussamad

 

Agora depois de entender o que é vamos as respostas:

Citar

o TimeOut não é só um tempo de espera, lugares que tem a conexão baixa

TimeOut é o tempo que o client espera uma resposta do servidor.

e keep alive é o contrário disso, é o tempo que o servidor vai manter a conexão ativa te esperando você voltar a fazer outra requisição.Veja isso é um recurso do servidor e o client que precisa dizer quer que permaneça ativa que ele vai voltar e fazer novas requisições.

Um exemplo claro disse é o envio assíncrono, nele o component envia a DF-e e em seguida espera uma resposta, essa "espera" terá que resolver toda negociação de conexão novamente, mas com o keep-alive esse não é mais necessário pois o servidor sabe que você vai voltar para pedir para ele o status do documento e mantem sua conexão ativa por N segundos.

Uma conexão ativa você não precisa fazer toda a negociação novamente e vai direto ao ponto e com isso a transação fica muito mais rápida.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Oi @Arnaldo Cruz

Não vai resolver mesmo.

Isso precisa compor a requisição http e como te disse o synapse não incluiu por padrão essa informação no cabeçalho da requisição.

O keepalive será adicionado a requisição se utilizar a unit que anexei.

Faz o teste mas troca o KeepAliveTimeout para 100 em vez de 300 como está na unit.

Veja nesse link:

https://groups.google.com/forum/#!msg/nfephp/YUwX8a1RpWw/sKk5dDi85-gJ

Citar

Date: Wed, 22 Dec 2010 13:11:45 GMT

Server: Oracle-Application-Server-10g/10.1.3.5.0 Oracle-HTTP-Server

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Transfer-Encoding: chunked

O servidor do sefaz do meu estado tem esse recurso e com isso posso utiliza-lo.

Bem provável que o Sefaz Virtual do RS, que é o que o Sefaz do PB utiliza tenha e você também pode utilizar.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Oi @BigWings,

Realmente nesse caso para o envio síncrono resolveria.

Mas no entanto a alteração proposta também serviria para os Sefaz que não aceitam o NFC-e no modo proposto e ainda para o NF-e que pelo que sei não pode ser enviado dessa forma.

Então se a conexão está ativa no servidor outras requisições também são resolvidas com muito mais agilidade pois teoricamente não precisariam mas resolver a conexão se acontecer antes do fim do timeout do keepalive.

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
11 minutos atrás, Waldir Paim disse:

Oi @BigWings,

Realmente nesse caso para o envio síncrono resolveria.

Mas no entanto a alteração proposta também serviria para os Sefaz que não aceitam o NFC-e no modo proposto e ainda para o NF-e que pelo que sei não pode ser enviado dessa forma.

Então se a conexão está ativa no servidor outras requisições também são resolvidas com muito mais agilidade pois teoricamente não precisariam mas resolver a conexão se acontecer antes do fim do timeout do keepalive.

Concordo, seria uma bela adição ao projeto.

Apenas uma correção, em RO que usa SVRS, mando tanto NF-e como NFC-e em modo síncrono, sem problemas.

7 minutos atrás, Arnaldo Cruz disse:

o modo sincrono é superior em 150%, todos webservices do nordeste aceitam este envio somente pra NFC-e, vou adotar este metodo

Agora to quebrando a cabeça pra pegar o protocolo e recibo

No modo síncrono não há recibo, o webservice já retorna o protocolo de autorização de uso, ou a rejeição, e o ACBr já atualiza os dados no componente, basta fazer a leitura:

ACBrNFe1.Enviar(nLote, False, True);
...
ACBrNFe1.NotasFiscais[0].NFe.procNFe.chNFe;
ACBrNFe1.NotasFiscais[0].NFe.procNFe.dhRecbto;
ACBrNFe1.NotasFiscais[0].NFe.procNFe.nProt;

 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.