Читаемый потоком канал Nodejs для ответа
Я должен поддерживать устаревший код. Основы: он должен обрабатывать входящий поток (аудио и / или видео). Стороннее устройство отправляет поток по запросу. Тогда клиент должен потреблять это.
Код был незавершенным, но для меня это кажется хорошим. Последняя версия NodeJS (atm): 8.9.4
// init.js (основной файл js)
global.readStream = new readStream();
Объект потока чтения выглядит следующим образом: // объект readStream
var Readable = require('stream').Readable;
var util = require('util');
function myReadStream() {
Readable.call(this);
this.data = null;
}
util.inherits(myReadStream, Readable);
myReadStream.prototype.addData = function (newData) {
this.data = newData;
console.log('new data: ', this.data);
};
myReadStream.prototype._read = function () {
this.push(this.data);
};
Итак, две конечные точки:
app.get('incomingdata', function (req, res) {
myReadStream.addData = res.newIncomingData;
// just writing the stream data directly
console.log('incoming: ', res.newIncomingData);
});
app.get('outgoingData', function (req, res) {
myReadStream
.on('readable', function () {
var obj;
while (null !== (obj = myReadStream.read())) {
myReadStream.pipe(res); // direct pipe to res
// alternative idea: res.send(obj);
// alternative #2: res.write(obj);
console.log('outgoing: ', obj);
}
});
});
В результате вызов "outgoingData" всегда повторяет только один этап данных readStream (то, что недавно было передано перед вызовом исходящих данных), но не обновляется...
Например:
Incoming: <Buffer 00 e3 ff ab a2 ....>
new data: <Buffer 00 e3 ff ab a2 ....>
Incoming: <Buffer 01 3b ca c1 b0 ....>
new data: <Buffer 01 3b ca c1 b0 ....>
Outgoing: <Buffer 01 3b ca c1 b0 ....>
Incoming: <Buffer 99 fa e8 77 00 ....>
new data: <Buffer 99 fa e8 77 00 ....>
Outgoing: <Buffer 01 3b ca c1 b0 ....>
Incoming: <Buffer ef b0 00 22 33 ....>
new data: <Buffer ef b0 00 22 33 ....>
Outgoing: <Buffer 01 3b ca c1 b0 ....>
Incoming: <Buffer 25 7b 91 aa 00 ....>
new data: <Buffer 25 7b 91 aa 00 ....>
Outgoing: <Buffer 01 3b ca c1 b0 ....>
У меня есть только опыт работы с Socket.Io, не так много для чтения и записи. Насколько я знаю, этот код был разработан ~1.5 года назад для версии 4.x. Код кажется хорошим, но чего-то не хватает. Есть идеи, что не так, как я могу это исправить?
(PS: я не люблю поддерживать устаревший код)