Giter VIP home page Giter VIP logo

interprocesscommunication's Introduction

Межпроцессовое взаимодействие

Задать вопрос

Межпроцессовое взаимодействие в Node.js

Через IPC в node.js

Заходим в каталог /workers, проект разделен на 3 файла (хотя, все можно было бы написать и в одном, но мы делаем так для нашего удобства):

  • multicore.js - это запускаемый модуль, запускаем так node multicore
  • master.js - модуль, который запускается в родительском процессе
  • worker.js - модуль, который запускается в дочернем процессе

Запускаем 'node multicore', который подгружает сначала master.js и происходит порождение дочерних процессов по количеству ядер процессора os.cpus().length при помощи cluster.fork(), ссылки на воркеры складываются в массив workers. Родительский процесс рассылает дочерним через worker.send() задачу на исполнение. Дочерний процесс ловит задачу (это массив) и перемножает все его элементы на 2, после чего отправляет результат обратно в родительский процесс. Когда родительский процесс получает ответы от всех дочерних, то он выходит, завершая и дочерние.

Через TCP сокеты

Заходим в каталог /tcpServer. Тут лежит пример передачи объекта из адресного пространства одного процесса, в адресное пространство другого при помощи протокола TCP/IP и сокетов операционной системы, API которых обернуто в библиотеку 'net' для Node.js.

  • server.js - серверная часть, слушает TCP порт 2000 (ждет подключений);
  • client.js - клиентская часть, подключается к 127.0.0.1 на порт 2000.

Запускать нужно из двух консолей, сначала из первой консоли node server, потом из второй node client. После запуска client.js подключается к серверу и отправляет ему привет. При подключении клиента, сервер отправляет ему при помощи метода socket.write(data) объект user, сериализованный (преобразованный в строку) через JSON.stringify(object). При подключении сервер еще выводит в консоль IP адрес клиента из socket.localAddress. Дальше сервер вешает событие на получение данных из клиентского сокета через socket.on('data', function). Клиент, точно так же вешает на свой сокет событие получения данных, и когда они приходят, то передает их для парсинга (синтаксического разбора) в метод JSON.parse(string), результатом выполнения которого, есть обычный объект JavaScript, с которым можно работать, как с объявленным в нашем процессе, например, читать и писать его свойства и обращаться к методам (функциям). Например: console.log(user.age) или console.log(user['age']) или user.doSometging(argument).

Задания

  1. Сделать ту же распределенную задачу с умножением массива, пример которой приведен в /workers, только на TCP сокетах.
  2. Усовершенствовать задачу так, чтоб массив разбивался на части, которые отправляются в разные процессы и разные части массива должны обрабатываться в разных процессах, а результаты сливаться в родительский процесс в любом порядке.
  3. Сделать так, чтобы результаты склеивались в родительском процессе в том же порядке, в котором задача была разделена на части.

Дополнительные задания

  1. Реализовать работу системы с произвольным кол-вом вычислительных клиентов и отслеживать их занятость, т.е. мы имеем массив клиентов, отмечаем в нем, что некоторые получили задачу и еще не вернули ответ, и можем разделять новые задачи в любой момент на свободных клиентов.
  2. Реализовать два типа клиентов, первый уже есть, он выполняет вычисления, а второй - дает задачу серверу. Таким образом, один тип клиента это customer (заказчик услуги), а второй это worker (исполнитель услуги). Сервер теперь выполняет функцию brocker (брокера услуги).
  3. Применить для обмена между процессами протокол JSTP: HowProgrammingWorks/JSTP
  4. Реализовать любую задачу при помощи этого примера распределенных вычислений из курса "Численные методы" или других разделов вычислительной математики. Например, решение СЛАУ.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.