Простое взаимодействие между двумя приложениями node.js по локальной сети - PullRequest
0 голосов
/ 28 декабря 2018

Я пишу приложение (с NWjs), которое запускаю на моем ноутбуке и ПК.Что я могу использовать, если просто хочу обмениваться данными между этими двумя компьютерами через мое приложение?

Идея заключается в следующем:

  • Machine1 (192.168.1.35): вот файлы, которые я могу воспроизвести
  • Machine2 (192.168.1.36): i'mзаинтересован в этом одном файле
  • Machine1 (192.168.1.35): хорошо, я играю его на 192.168.1.35:3000/0

Я думал об разоблачении "здесьфайлы, которые я могу воспроизвести "с помощью файла json, размещенного на Machine1 где-то, например, 192.168.1.35:3000/db.json

Затем прочитайте этот json с Machine2, выберите один файл и ???общаться ???какой это для Machine1.

Machine1 будет размещать его на 192.168.1.35:3000/0, и ???общаться ???полный путь к Machine2.

"??? общаться ???"часть, где я застрял.Есть ли что-то простое, что я мог бы использовать?Может быть, что-то вроде команды «net send» для Windows (и части, где я действительно могу прочитать то, что было отправлено, и действовать соответственно).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

После некоторого копания оказывается, что вы можете POST на http-сервер.Вот что я сделал:

Machine1:

let ip = '192.168.1.35';

// create a json
let json = {
  movies:[
    {title: 'my movie 1',
     path: 'D:\Videos\mymovie1.mkv,
     size: 100000},
    {title: 'my movie 2',
     path: 'D:\Videos\mymovie2.mkv,
     size: 100000}
  ]
};

// create a server for GET/POST
let apiServer = require('http').createServer((res,req) => {

  // on GET, serve the json
  if (req.method === 'GET') {
    res.writeHead(200, {'Content-Type': 'application/json'});
    res.write(JSON.stringify(json));
    res.end();
  }

  // on POST, check what the Machine2 wants to play
  if (req.method === 'POST') {
    let body = String(); // create body
    req.on('data', data => body += data); // update body with POST content

    req.on('end', () => {
      let file = JSON.parse(body);

      // create a server for serving the file over http
      let playServer = http.createServer((req,res) => {
        res.writeHead(200, {
          'Content-Type': 'video/mp4',
          'Content-Length': file.size
        });

        let readStream = require('fs').createReadStream(file.path);
        readStream.pipe(res);
      });

      // start serving the file on localhost:3001
      playServer.listen(3001);

      // respond to Machine2 where the file is streamed
      res.writeHead(200, {'Content-Type': 'application/json'});
      res.write(JSON.stringify({
        url: `http://${ip}:3001`
      }));
      res.end();
    });
  }
});

// start serving the json on localhost:3000
apiServer.listen(3000);

Machine2:

let available;

// send a GET to Machine1
require('request')('http://192.168.1.35:3000', (err, res, body) => {
  available = JSON.parse(body);
});

// select desired file
let wantedMovie = available.movies[0];

// send a POST to Machine1 saying what I want.
require('request')('http://192.168.1.35:3000', {
  method: 'POST',
  body: JSON.stringify(wantedMovie)
}, (err, res, body) => {
  let url = JSON.parse(body).url;
  // => playback the file from Machine1 via the URL.
});
0 голосов
/ 28 декабря 2018

Вам необходимо иметь сервер HTTP (Node.js), работающий на одном компьютере (скажем, на машине A), на котором вы могли бы сделать HTTP-запрос с другого компьютера (из приложения Node.js, машина B) и, следовательно, обмениваться данными между компьютерами.Вы должны будете выставить конечные точки HTTP-запроса на Приложении машины А.Некоторые хорошие библиотеки для этого:

  • ExpressJS

  • RESTify

Кроме того,вы могли бы создать интерфейсы WebSocket в приложении Node.js на обеих машинах для более быстрой передачи событий.

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