Каков наиболее эффективный способ отправки изображений с сервера на клиент? - PullRequest
0 голосов
/ 11 февраля 2019

Я создал сервер node.js и веб-сайт с экспрессом.Сайт в основном показывает множество связанных фотографий, таких как фотографии, сделанные в 2017 году. Сервер работает на Raspberry pi с подключенным к нему внешним жестким диском, с которого сервер принимает изображения.Когда пользователь получает доступ к сайту, клиент отправляет запрос инициализации на сервер через веб-сокеты, чтобы начать отправку изображений.Затем сервер отправляет X-изображения также через веб-сокеты, и пользователь может запросить больше с другим запросом инициации.Как я могу сделать это более эффективным?Есть ли более быстрый способ, чем веб-сокеты?

Несколько замечаний

  1. Я знаю, что Pi по своей сути медленный и что жесткий диск является узким местом.Тем не менее, я хочу оптимизировать передачу данных.
  2. Я уже рассмотрел переполнение стека в другом вопросе и рекомендовал удалить метаданные, которые я сделал.

Код на стороне сервера:

con.on("message", function incoming(message) {

  let msgArr = message.split(", ");
  let prefix = 'a';
  let year = '2008';

  if (msgArr[0].includes('2008')) {prefix = 'a'; year = '2008'}
  if (msgArr[0].includes('2009')) {prefix = 'b'; year = '2009'}
  if (msgArr[0].includes('2010')) {prefix = 'c'; year = '2010'}
  if (msgArr[0].includes('2011')) {prefix = 'd'; year = '2011'}
  if (msgArr[0].includes('2012')) {prefix = 'e'; year = '2012'}
  if (msgArr[0].includes('2013')) {prefix = 'f'; year = '2013'}
  if (msgArr[0].includes('2014')) {prefix = 'g'; year = '2014'}
  if (msgArr[0].includes('2015')) {prefix = 'h'; year = '2015'; msgArr[1]++;}
  if (msgArr[0].includes('2016')) {prefix = 'i'; year = '2016'; }
  if (msgArr[0].includes('2018')) {prefix = 'j'; year = '2018';}


  let path = "/Volumes/Seagate\ Drive/" + year + "/" + prefix + msgArr[1] + ".jpg";

fs.readFile(path, function (err, data) {
  if (err) {con.send("error")}
  else {
    con.send(data.toString('base64'));
    console.log("image sent");
  }

Клиентская сторона просто получает изображение, помещает его на сайт и затем отправляет запрос еще одного изображения, пока оно не достигнет Xизображения.

1 Ответ

0 голосов
/ 12 февраля 2019

надеюсь, что это поможет

const path = require("path");
const fs = require('fs');

exports.getBookImage = async (req, res) => {
    let filepath = path.join(__dirname + `/root/folder/file`);
    res.sendFile(filepath);
};

здесь __dirname - встроенная функция для получения пути выполнения текущего файла

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