-
Total de ítens
22 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por desdobrar
-
-
10 horas atrás, Daniel Simoes disse:
Eu creio que cada Thread, precisará de um Monitor diferente...no comando acima, está fixo o Display 1
Entendi, realmente pode ser esse o problema. Como que poderia fazer isso?
-
30 minutos atrás, Daniel Simoes disse:
Que comando você usa para iniciar a API, com a emulação do Servidor X ?
eu uso assim:
Xvfb :1 -ac & export DISPLAY=:1
crio e executo uma instancia de interface usando o xvfb
depois disso eu executo a aplicação normalmente com node index.js
se eu executar sem os comandos antes pra configurar o display ele aparece esse erro!, usando o comando a cima antes funciona normalmente!
-
Como você pode vê na demonstração 1 quando carrego um por vez funciona corretamente.
Já na 2, eu carrego a req mais demorada (PDF base64) e em seguida carrego a info e assim que executa a info para tudo e cancela tudo.
Tudo leva a crer que seja algo relacionado ao ponteiro, porem como ele funciona no Windows então pode ser algo diferente, mas o problema é bem parecido o que acontecia no Windows.
-
7 minutos atrás, Daniel Simoes disse:
O Linux está rodando em modo Console ? (Sem o servidor X)
A lib ainda depende de um ambiente gráfico...
Você pode emular um, usando o XVFB
sim, está rodando em modo console, ja foi configurado tudo e funciona normalmente quando faz uma unica req, porem quando executa mais de uma ele finaliza, parecido uq acontecia com o windows rsrs, ohh sofrimento kkkk
-
22 minutos atrás, Daniel Simoes disse:
isso me chamou atenção... é algo que possa ser chamado no seu código de inicialização ?
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
não, acredito que seja relacionado a lib ou as dependências dela, pois eu testei o worker_threads sem a chamada da lib e o carregamento e funcionamento de varias reqs ao mesmo tem funcionando normalmente.
-
19 minutos atrás, desdobrar disse:
isso, foi usada a Cdecl\ACBrNFe64.dll,
vou tentar colocar mais Bytes e fazer mais testes.
Sem sucesso, esses foram os erros que apareceu ao longo de varios testes relacionados a essa mensagem: Segmentation fault
veja se você reconhece algum pra termos uma noção pra onde seguir!
ERROR in code: TGtk2WidgetSet.CreateBitmapFromRawImage Incompatible DataSize Creating gdb catchable error: $00007FBA8C695028 $00007FBA8C692BB5 $00007FBA8C7512B1 $00007FBA8C67ECEC $00007FBA8C6CE048 $00007FBA8C6D3E87 $00007FBA8C6D873E $00007FBA8C6DBB64 $00007FBA8C6E563E Floating point exception --------------------------- node: ../../src/xcb_io.c:533: _XAllocID: Assertion `ret != inval_id' failed. Aborted --------------------------- [xcb] Unknown request in queue while dequeuing [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called [xcb] Aborting, sorry about that. node: ../../src/xcb_io.c:163: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed. node: Fatal IO error 11 (Resource temporarily unavailable) on X server :1. Aborted [xcb] Unknown request in queue while dequeuing [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called [xcb] Aborting, sorry about that. node: Fatal IO error 11 (Resource temporarily unavailable) on X server :1. node: ../../src/xcb_io.c:163: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed. Aborted node: Fatal IO error 2 (No such file or directory) on X server :1. [TGtk2WidgetSet.Destroy] WARNING: There are 2 unreleased GDIObjects, a detailed dump follows: [TGtk2WidgetSet.Destroy] GDIOs: 00007F529EA460C0 00007F529F0B3940 [TGtk2WidgetSet.Destroy] gdiBitmap: 2 [TGtk2WidgetSet.Destroy] WARNING: There are 1 unreleased GDIObjects, a detailed dump follows:
-
Agora, Daniel Simoes disse:
no Windows você testou com a versão 64 bits ?
Pode ser que você precise de um handle com mais Bytes, em 64 bits... Não sei se o comando abaixo é válido.. algo como:
let handlePtr = ref.refType('long');
isso, foi usada a Cdecl\ACBrNFe64.dll,
vou tentar colocar mais Bytes e fazer mais testes.
-
3 minutos atrás, Daniel Simoes disse:
A variável com o "handle", é única para cada Thread ?
A convenção de chamadas, é CDECL ?
sim, a handle é inicializada em cada work e definida pelo método NFE_Inicializar da lib.
estou usando: ../libs/bin/MT/Linux/libacbrnfe64.so
-
Estamos passando pelo seguinte problema na hora de executar varias reqs ao mesmo tempo: Segmentation fault
quando executamos uma unica req no linux ela funcionar perfeitamente, agora quando executa varias reqs diferentes ou iguais ao mesmo tempo acontece esse erro, alguém sabe algum caminho?
-
4 minutos atrás, Daniel Simoes disse:
@desdobrar, que fantástica a iniciativa de vocês...
Eu estava quebrando a cabeça com essa inicialização.. e como não sou nativo em Node.Js, estava apanhando...
Ficarei muito grato por toda essa ajuda, e pela a elaboração de um Demo compatível com Multi Thread...
Posso enviar um brinde do ACBr a vocês e para o @CODIGO SISTEMAS LTDA ?
Nossa, muito obrigado, pode sim!
ainda estamos tentando fazer funcionar no linux, parece que o ponteiro que rodou no windows não funciona no linux, estamos tentando achar uma solução. assim que conseguir fazer funcionar no linux posto aqui a resolução e logo em seguida mando os exemplos limpos e documentados de como rodar em ambas as plataformas.
-
Boa tarde, achamos o problema, o @CODIGO SISTEMAS LTDA Luiz Augusto, conseguiu achar o problema.
basicamente o problema era na execução e criação do pointer, segue como foi solucionado.
A chamada da Lib ficou assim
let handlePtr = ref.refType('int'); const libm = ffi.Library(pathDllACBrLibNFe, { NFE_Inicializar: ['int', [handlePtr, 'string', 'string']], NFE_Finalizar: ['int', [handlePtr]], NFE_UltimoRetorno: ['int', [handlePtr, 'string', 'string']], NFE_Nome: ['int',[handlePtr, 'string','string']], NFE_Versao: ['int', [handlePtr, 'string','string']], NFE_ConfigLer: ['int', [handlePtr, 'string']], NFE_ConfigGravar: ['int', [handlePtr, 'string']], NFE_ConfigLerValor: ['int',[handlePtr,'string','string','string','string']], NFE_ConfigGravarValor: ['int', [handlePtr, 'string', 'string', 'string']], NFE_ConfigImportar: ['int',[handlePtr, 'string']], NFE_ConfigExportar: ['int',[handlePtr, 'string','string']], NFE_ObterCertificados: ['int',[handlePtr, 'string','string']], NFE_CarregarXML: ['int', [handlePtr, 'string']], NFE_SalvarPDF: ['int',[handlePtr, 'string','string']], });
A execução da inicialização ficou assim:
let handle = ref.alloc(handlePtr); libm.NFE_Inicializar(handle, '', eChaveCrypt); handle = handle.deref();
e os demais métodos vc chama da mesma forma
libm.NFE_ConfigGravarValor(handle, 'Principal', 'TipoResposta', '2');
OBS: a execução em node ainda depende da funcionalidade worker_threads, pois ainda precisa fazer o node executar varias instancias. ainda estou finalizando os testes e logo mais estarei criando um exemplo bem limpo e objetivo pra poder ser anexado nos exemplos em node js. Obrigado!
- 5
- 1
-
12 horas atrás, antonio.carlos disse:
Daniel Simões esta analisando, pode demorar alguns dias, isso pode ser uma limitação do NodeJS ou da biblioteca FFI que o NodeJS utiliza para carregar as DLLs
Entendi, joia, em quanto isso, eu vou procurar outras alternativas pra tentar se comunicar com a lib usando node.
-
2 horas atrás, Daniel Simoes disse:
@desdobrar, ainda estou tentando montar um ambiente para rodar e debugar...
Minha suspeita é que o Ponteiro da Lib, não está retornando de forma correta, devido a forma como os parâmetros estão sendo passados... Ainda estou estudando sobre o assunto, no tutorial da FFI
https://github.com/node-ffi/node-ffi/wiki/Node-FFI-Tutorial
Notei que em nosso Discord, tem um outro usuário que está usando com sucesso a versão MT com Node.js
https://discord.com/channels/798697718800318484/798966420243349527/1029496508904636467
O Luiz Augusto, está exatamente com o mesmo problema que eu, ele tbm não conseguiu implementar o MT com nodejs, já conversei com ele e passei minha evolução, ele que percebeu que realmente a minha primeira implementação não executava em MT, executa como uma fila.
Tentei executar criando uma alocação do tipo int com 4 bytes conforme vc informou;
let handle = ref.alloc(ref.types.int, 4);
essa é a forma como eu recebo o ponto pra passar pras outras funções.
handle = ref.readPointer(handle, 0, 4);
porem tbm sem sucesso!
Eu tbm estou acreditando que o problema esteja com esse ponto de identificação, existe algo errado com ele, ou ele não reescreve ou ele sempre cria o mesmo ponto sempre.
- 1
-
esse foi o log obtido quando executo a mesma req ao mesmo tempo como se fosse 2 clientes diferentes!
Quando eu executo o 1 ele vai, assim que executo o 2 ele mata o processo do 1 e continua o 2 até finalizar.
-
5 horas atrás, antonio.carlos disse:
Realizando alguns testes aqui com o programa exemplo no C#, na versão MultiThread, veja:
Eu criei duas instancias da aplicação, ambos utilizando versão MT:
Instancia 1:
Veja o valor de libHandle, agora comparando com a instancia 2:
Cada um recebeu um valor diferente, possibilitando o uso de múltiplas instancias e chamadas dos métodos no programa exemplo..
e olhando o log:
07/12/22 11:15:16:582 - NFE_ObterCertificados
07/12/22 11:15:18:712 - NFE_ObterCertificadosChamada do método praticamente ao mesmo tempo.
07/12/22 11:19:10:977 - LIB_UltimoRetorno
07/12/22 11:19:10:980 - Codigo:0, Mensagem:
07/12/22 11:19:11:857 - LIB_UltimoRetorno
07/12/22 11:19:11:862 - Codigo:0, Mensagem:
Detalhe, o tempo de 11:15 para 11:19 é porque estava em modo debug, por este motivo demorou alguns minutinhos para obter o retorno do método.
Não realizei testes em node, pois não conheço a linguagem, mas temos colegas na comunidade do ACBr que utilizam NodeJS, podem te ajudar no uso da lib versão multithread.
Tem exemplo no nosso SVN, foi contribuição da comunidade:
http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Node.js/
Acredito que o mesmo não esteja em multithread, não sei se te ajuda também...Legal, pois eu já verifiquei todos os exemplos, e ainda nao conseguir fazer rodar em MT, eu vou preparar os testes com o log da lib pra verificar e comparar com esse teste que vc fez em C#.
nenhum dos exemplos em JS usa o MT, a execução normal em ST funciona perfeito. o problema mesmo e no uso e execução do MT.
-
-
Olá, conforme, foi passado no discord, segue a reprodução do erro ACBRLIB NFE que não executa em MT.
- A lib. em single thread funciona perfeitamente
- O propósito da execução do MT da lib. É criar uma API web que use todos os serviços da lib.
- Cada requisição da API, end-point irá executar uma função da lib.
- Ao executar várias requisições na situação 1, ela se comporta como um semáforo, esperando a primeira requisição terminar para as outras finalizar, em quanto não finaliza uma a outra continua em execução aguardando-a terminar.
Problema 1: A Lib. do Acbr não executa em MT, quando passado todos os parâmetros de pointer definindo um novo thread a mesma se comporta como um semáforo, esperando uma requisição termina para continuar a outra.
Problema 2: Ao fazer o node executar MultiThreads com a função nativa do node worker_threads, quando executado requisições diferentes ele se comporta perfeitamente como o esperado, mas quando eu tento realizar a execução da mesma requisição ele acaba matando todas as requisições anulando-as completamente, sendo impossível de finalizar a requisição.
CitarInformações de como reproduzir, junto com os arquivos necessários em anexo. LEIA O ARQUIVO Instruções.docx, lá contem todo o passo a passo para configurar o ambiente.
Link do Arquivo: https://stsw.com.br/exemplos-mt-acbr-lib.zip
-
Olá, eu preciso implementar o MT usando a lib, porem sem sucesso, usando uma instancia da lib funciona normal, mas na mt nao funciona, estou tentando inserir o parâmetro extra mas sem sucesso, como especificado no link: https://acbr.sourceforge.io/ACBrLib/ACBrLibeMultiThread.html
Alguém pode me ajudar??
-
1 minuto atrás, Juliomar Marchetti disse:
exatamente. mesma coisa. só informar nos campos que vai ssair seus dados
top, muito obrigado
- 1
-
15 horas atrás, Juliomar Marchetti disse:
Tu usa o componentes o monitor ou a lib?
o que ele fala é no componente extrato que estiver usando
eu conseguir mudar, é no cadastro da sh no monitor, breve vou precisar fazer na lib, mas seguindo a logica, provavelmente é a mesma forma. Obrigado
-
Em 26/01/2021 at 17:53, BigWings disse:
Para a referência ao ACBr, veja as propriedade "Sistema" e "Site" do componente do extrato.
As demais informações vem do XML do CFe.
Em qual lugar fica essa configuração?
Lib. do Acbr não executa em MultiThreads utilizando Node.js
em Dúvidas gerais
Postado
joia, ainda nao.
bacana se eliminar essas dependências gráficas ficará top de mais!
eu vou tentar fazer o xvfb executar dinamicamente.
pro uso da lib em MT em outras linguagens no linux precisa fazer a mesma coisa com o xvfb? fazer ele executar dinamicamente em MT?