Как выводить информацию в нескольких терминалах?

В Node.js для вывода информации в нескольких терминалах можно воспользоваться механизмом IPC (Inter-process communication) или простым механизмом сетевого взаимодействия.

Один из способов использования IPC в Node.js - это использование модуля child_process. Модуль child_process позволяет создавать новые процессы и устанавливать между ними каналы связи.

Для примера, давайте создадим основной процесс и два дочерних процесса, соединенные между собой каналами IPC:

const { fork } = require('child_process');

// Основной процесс
const mainProcess = fork('./main.js');

// Дочерний процесс 1 (требуется передать канал IPC)
const childProcess1 = fork('./child.js', [], { stdio: ['ipc', 'pipe', 'pipe', 'pipe', 'pipe'] });

// Дочерний процесс 2 (требуется передать канал IPC)
const childProcess2 = fork('./child.js', [], { stdio: ['ipc', 'pipe', 'pipe', 'pipe', 'pipe'] });

// Устанавливаем обработчики событий для получения данных от дочерних процессов
mainProcess.on('message', (data) => {
  console.log(`Main process received: ${data}`);
});

childProcess1.on('message', (data) => {
  console.log(`Child process 1 received: ${data}`);
});

childProcess2.on('message', (data) => {
  console.log(`Child process 2 received: ${data}`);
});

// Отправляем данные от основного процесса к дочерним
mainProcess.send('Hello from main process!');

Здесь основной процесс создает два дочерних процесса с использованием fork(), устанавливает каналы связи через IPC с помощью опции stdio и устанавливает обработчики событий для получения данных от дочерних процессов. Затем основной процесс отправляет данные в дочерние процессы с помощью метода send().

Дочерние процессы должны быть реализованы в отдельных файлах child.js с помощью модуля process:

// child.js
process.on('message', (data) => {
  console.log(`Child process received: ${data}`);
});

// Отправляем данные от дочернего процесса к основному процессу
process.send('Hello from child process!');

Таким образом, информация будет выводиться как в основном процессе, так и в каждом дочернем процессе, позволяя возможность коммуникации между ними.

Вторым способом является использование сетевого взаимодействия, например, с использованием сокетов TCP или WebSocket. В этом случае можно создать сервер, который будет слушать определенный порт, и клиенты, которые будут подключаться к серверу и передавать информацию.

// Сервер
const net = require('net');

const server = net.createServer((client) => {
  console.log('Client connected');

  client.on('data', (data) => {
    console.log(`Server received: ${data}`);
  });
});

server.listen(3000, () => {
  console.log('Server listening on port 3000');
});


// Клиент
const net = require('net');

const client = net.connect({ port: 3000 }, () => {
  console.log('Connected to server');
});

client.on('data', (data) => {
  console.log(`Client received: ${data}`);
});

client.write('Hello from client');

В данном примере мы создаем TCP-сервер, который слушает порт 3000 и выводит сообщения, полученные от подключенных клиентов. Клиент также подключается к серверу и отправляет сообщение. Оба сервер и клиент выводят входящие сообщения из своих соединений.

Это только примеры для демонстрации возможности вывода информации в нескольких терминалах в Node.js. В зависимости от конкретной ситуации и требований, может потребоваться использование других методов и инструментов для реализации взаимодействия между различными процессами или клиент-серверной модели работы.