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.
Gebruik ik echter de 'keypress' library om te triggeren op een willekeurige toetsaanslag op het toetsenbord, dan werkt het wel instantaan:
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?
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 ]