[nodejs] Data in het geheugen laden?
Werkt goed!
Echter als ik het script aanroep op www.mijnsite.nl:8082, moet hij eerst wachten totdat er data binnenstroomt vanuit de stroom, dus maximaal elke tien seconden wachten voordat de site zich laadt.
Kort gezegd:
Kan dit niet eenvoudig in het geheugen worden bewaard bij het aanroepen van het script in de browser, zodat ik altijd de laatste versie heb, zonder wachttijden? Ik lees veel over caching i.c.m. nodejs maar weet niet wat nou de beste oplossing voor dit geval is.
Andere oplossingen die ik bedacht heb:
- Elke 10 seconden opslaan als bestand lijkt me ook een overdreven
- Redis kan mogelijk ook om het te cachen, maar als het simpel kan is het mooi meegenomen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var http = require('http');
var zlib = require("zlib");
var zmq = require('zmq')
, socket = zmq.socket('sub')
, endpoint = 'tcp://www.server.nl:8765';
// create webserver
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/xml'});
// Add the event handler before we connect
socket.on('message', function () {
msg = Array.prototype.slice.call(arguments)
address = msg[0].toString()
console.log(address)
var contents = Buffer.concat(msg.slice(1));
console.log(msg)
console.log(msg.slice(1))
console.log(contents)
// msg[1] i.p.v contents werkt wel
zlib.gunzip(contents, (err, buffer) => {
if (err) {
console.error(err);
return;
}
console.log(buffer.toString());
res.end(buffer.toString());
});
});
socket.connect(endpoint);
// subscribe to all of the messages
socket.subscribe('/RIG/NStreinpositiesInterface5');
//socket.setsockopt(zmq.ZMQ_SUBSCRIBE, new Buffer(''));
}).listen(8082);
var zlib = require("zlib");
var zmq = require('zmq')
, socket = zmq.socket('sub')
, endpoint = 'tcp://www.server.nl:8765';
// create webserver
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/xml'});
// Add the event handler before we connect
socket.on('message', function () {
msg = Array.prototype.slice.call(arguments)
address = msg[0].toString()
console.log(address)
var contents = Buffer.concat(msg.slice(1));
console.log(msg)
console.log(msg.slice(1))
console.log(contents)
// msg[1] i.p.v contents werkt wel
zlib.gunzip(contents, (err, buffer) => {
if (err) {
console.error(err);
return;
}
console.log(buffer.toString());
res.end(buffer.toString());
});
});
socket.connect(endpoint);
// subscribe to all of the messages
socket.subscribe('/RIG/NStreinpositiesInterface5');
//socket.setsockopt(zmq.ZMQ_SUBSCRIBE, new Buffer(''));
}).listen(8082);
Voor wie interesse heeft, de data komt bij het NDOV-loket vandaan!
Gewijzigd op 17/02/2019 22:44:53 door - Ariën -
Quote:
Afhankelijk van de hoeveelheid werkgeheugen die je toewijst aan je NodeJS proces, kan je data in je werkgeheugen zetten door gewoon een normale javascript object te maken boven aan je .js bestand door bijvoorbeeld dit te doen:
gezien NDOV berichtjes niet heel groot zijn kan je deze gewoon in je werkgeheugen plaatsen, en dan eens in de zoveel tijd in een bestand op te slaan. Dit kan je bijvoorbeeld doen om bovenaan je script een variabele aan te maken met een INT erin, die INT op te laten tellen bij elk bericht en dan bijvoorbeeld bij elke 30 berichten het op te slaan in een bestand:
(Wel even het bestand data.json maken)
en wanneer je via een HTTP request je data wil ophalen doe je dat zo:
gezien NDOV berichtjes niet heel groot zijn kan je deze gewoon in je werkgeheugen plaatsen, en dan eens in de zoveel tijd in een bestand op te slaan. Dit kan je bijvoorbeeld doen om bovenaan je script een variabele aan te maken met een INT erin, die INT op te laten tellen bij elk bericht en dan bijvoorbeeld bij elke 30 berichten het op te slaan in een bestand:
(Wel even het bestand data.json maken)
en wanneer je via een HTTP request je data wil ophalen doe je dat zo:
En dat ga ik dus proberen, blijkbaar werkt het wel met caching met een bestand. Maar dat elke 10 seconden aanpassen lijkt wel mee te vallen.