Node.js порождает поток доступа к процессу в нескольких экземплярах - PullRequest
0 голосов
/ 02 декабря 2018

Описание приложения

Node.js + Express.js

Приложение подает видеопоток с камеры Raspberry Pi 3 наконечная точка.Поток частично работает.

Проблема

Работает только для одного клиента.Когда второй клиент запрашивает потоковую передачу, поток прерывается - второй клиент не получает никаких данных, и первый подключенный клиент прекращает получать дальнейшие данные.

Код

const { spawn } = require('child_process');
const express = require('express');

const router = express.Router();
const vstream = spawn('raspivid', ['-t', '9999999', '-o', '-', '-n']);

router.get('/stream', (req, res) => {
  vstream.stdout.pipe(res);
});

module.exports = router;

Я думаю, чтопроисходит

Когда код запускается, дочерний процесс, который выполняет необходимую команду для записи видео с камеры, запускается с spawn().Этот процесс выводит поток в его stdout.

Когда клиент запрашивает потоковую передачу, поток передается по конвейеру к объекту результата, т. Е. До тех пор, пока raspivid выводит что-то, что клиент получает его как частичные ответы.

Вопрос

Интересно, когда второй (и третий, и т. Д.) Клиент запрашивает потоковую передачу, что происходит вокруг vstream.stdout.pipe(res) для прерывания потока?Должен ли я клонировать поток вывода из vstream как-то?Или я должен использовать совершенно другой подход к проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...