веб-сокет повесить получить несколько запросов nodejs - PullRequest
0 голосов
/ 19 февраля 2019

Я создал back-end (используя node.js) и onsite-server (используя node.js).Обслуживание на месте, имеющее rtsp, сохранение видео с камеры на сервере.Внутренний сервер соединяется с локальным сервером с помощью веб-сокета и отправляет много запросов на локальный сервер для видеопотока.

Но если я отправил много запросов на локальный веб-сокет сервера, он зависает, и видеопоток очень медленный.

**Back-end code -**

/**
         * @desc - Listen the get video request
         * @param {object} req - hold request object
         * @param {object} res - hold response object
         */
        loadVideo: function (req, res) {
            let { storeId, video, size, camId, dir } = req.params;
            let range = req.headers.range;
            let parts = range ? range.replace(/bytes=/, "").split("-") : [0];
            let start = parseInt(parts[0], 10);
            let end = start + consts.defaultChunkSize < size - 1 ? start + consts.defaultChunkSize : size - 1;
            //"5c3847754e9e0f38f4e6607c"
          //  console.log({ action: 'loadTimeLineVideo', data: { storeId: storeId, dir: dir, camId: camId, start: start, end: end, video: video, size: size } })
            ws.Send({ action: 'loadTimeLineVideo', data: { storeId: storeId, dir: dir, camId: camId, start: start, end: end, video: video, size: size } });
            let videoResponseHandler = (response) => {
                //streamifier.createReadStream(_Response).pipe(res);
                let file = streamifier.createReadStream(response);
                let chunksize = (end - start) + 1
                let head = {
                    'Content-Range': `bytes ${start}-${end}/${size}`,
                    'Accept-Ranges': 'bytes',
                    'Content-Length': chunksize,
                    'Content-Type': 'video/mp4',
                }
                res.writeHead(206, head)
                file.pipe(res);
            };
            eventEmitter.once('videoResponse', videoResponseHandler);
        },

**Onsite-server code -**

 let { start, end, video, size } = data,
          path = `${videoPath}\\${data.camId}\\${data.dir}\\${video}`;
        if (!fs.existsSync(path)) {
          path = `${videoPath}/NoVideoAvailable.mp4`;
        }

        var currentDate = moment();
        console.log("Read Start " + currentDate);
        var fileStream = fs.createReadStream(path, { start, end, highWaterMark: 512 * 1024 });

        fileStream.on('end', function () {
          console.log("Read End Stream: Current Time: " + moment().format("YYYY-MM-DD hh:mm:ss") + " Diff: " + moment().diff(currentDate, 'seconds'))
        })
        fileStream.pipe(request.post(util.getServerUrl + "/api/reponseTimelineVideo")).on('end', function () {
          console.log("Read End: Current Time: " + moment().format("YYYY-MM-DD hh:mm:ss") + " Diff: " + moment().diff(currentDate, 'seconds'))
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...