[NodeJS] Delay in http.request

Pagina: 1
Acties:

Vraag


  • RoL0
  • Registratie: Oktober 2010
  • Laatst online: 15:51
Ik probeer een MIDI device aan een webapi te koppelen met NodeJS. Ik heb de code gestript tot een minimum, maar loop nog steeds tegen een vertraging aan:

Het idee is om een callback aan een midi-event te hangen (input.on), waarbij een GET request (http.request) naar 'een' webapi gemaakt wordt. Wanneer ik nu 'input.on' trigger door op het midi-apparaat een willekeurige toets in te drukken krijg ik keurig netjes instantaan 'Event!' in mijn console, maar kan het tot 10 seconden duren voordat mijn de api-call gemaakt wordt, terwijl ik verwacht dat dit meteen gebeurt. Wanneer ik het programma in de debugger van VSCode draai, een event trigger, de debugger pauseer en weer op run klik, worden alle 'achterstallige' requests alsnog in één keer uitgevoerd.

De API-kant test ik dmv een simpele NodeJS-app die luistert op 8080 en de gehele route naar de console print. Bij gebruik van bijvoorbeeld Postman of een browser zie ik mijn request zonder enige vertraging, dus daar zal het waarschijnlijk niet aan liggen.

JavaScript:
1
2
3
4
5
6
7
8
9
10
const midiLib = require('easymidi');
const http = require('http');

const input = new midiLib.Input('mididevice');

input.on('message', (deltaTime, message) => {
  var req = http.request('http://127.0.0.1:8080/api/');
  req.end();
  console.log('Event!');
});


Gebruik ik echter de 'keypress' library om te triggeren op een willekeurige toetsaanslag op het toetsenbord, dan werkt het wel instantaan:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
const keypress = require('keypress');
const http = require('http');

keypress(process.stdin);

process.stdin.on('keypress', function (ch, key) {
  var req = http.request('http://127.0.0.1:8080/apis/');
  req.end();
});

process.stdin.setRawMode(true);
process.stdin.resume();


Iemand enig idee wat ik verkeerd doe en wat ik kan doen om te zorgen dat midi-events zonder vertraging een API-call kunnen maken?

[ Voor 5% gewijzigd door RoL0 op 07-08-2020 16:38 ]

Beste antwoord (via RoL0 op 07-08-2020 17:32)


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Heb je een recente versie van node-midi?

https://github.com/justinlatimer/node-midi/issues/157

Alle reacties


  • reputatio
  • Registratie: Mei 2017
  • Laatst online: 09:19
Het feit dat de console.log wel direct wordt getriggered, wordt de code wel direct uitgevoerd.
Aan de hand waar van weet je dat er een delay van een seconde of 10 tussen zit? Zie je dat op je HTTP server?

  • RoL0
  • Registratie: Oktober 2010
  • Laatst online: 15:51
Dat zie ik inderdaad aan de http-server (wat dus een simpele NodeJS applicatie is die luistert en all request naar de console stuurt).

Het vreemde is dat ik bij een zelfde constructie met een toetsenbord deze vertraging niet zie.

Acties:
  • Beste antwoord

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Heb je een recente versie van node-midi?

https://github.com/justinlatimer/node-midi/issues/157

  • RoL0
  • Registratie: Oktober 2010
  • Laatst online: 15:51
Interessant, die laat eigenlijk precies mijn probleem zien. Ik gebruik echter de laatste versie van node-mid (v1.0.0), waarin dit probleem al opgelost zou moeten zijn. (In mijn voorbeeld gebruik ik easymidi, dat een wrapper rond node-midi is, maar ik heb hetzelfde probleem als ik node-midi rechtstreeks gebruik).

EDIT: Ik zie nu pas dat dit een pull-request is die nooit is toegevoegd aan de release. Eens kijken of ik zelf een versie kan bouwen.

EDIT 2: Yes! Dit lost het op!

[ Voor 36% gewijzigd door RoL0 op 07-08-2020 17:46 ]


  • Vihaio
  • Registratie: November 2006
  • Laatst online: 01-11 21:50
158 is een open pull request, die fix zit dus nog niet in de laatste release.

edit: Daar was je zelf dus ook al achter :D

[ Voor 23% gewijzigd door Vihaio op 07-08-2020 17:48 ]

Pagina: 1