модуль nodejs для локального и удаленного межпроцессного взаимодействия с полной поддержкой Linux, Mac и Windows. Он также поддерживает все формы связи через сокеты: от низкоуровневых сокетов Unix и Windows до UDP и безопасных сокетов TLS и TCP.
Отличное решение для сложных многопроцессных нейронных сетей в Node.JS.
npm install node-ipc
npm install node-ipc@^9.0.0
//es6
import ipc from 'node-ipc'
//commonjs
const ipc = require ( 'node-ipc' ) . default ;
Информация о npm: просмотр тенденций и статистики npm для node-ipc.
Информация с GitHub:
Информация о покрытии кода:
Запустите npm run coverage
, чтобы разместить локальную версию отчета о покрытии на localhost:8080. Это тот же формат, что и в Стамбуле и Нью-Йорке. Это должно быть очень знакомо.
Тестирование выполнено с помощью vanilla-test.
vanilla-test
интегрируется с c8 для обеспечения собственного покрытия ESM без необходимости транспилировать ваш код. На момент написания это единственный способ протестировать ESM собственными средствами, и это потрясающе!
Веб-сайты с подробной информацией о пакете:
Эта работа лицензирована по лицензии MIT.
последние версии node-ipc
могут работать с флагом --harmony. Однако официально мы поддерживаем узел v4 и новее с es5 и es6.
npm test
запустит тесты jasmine с помощью istanbul для node-ipc и создаст отчет о покрытии в папке спецификации.
Возможно, вы захотите установить жасмин и стамбул глобально с помощью sudo npm install -g jasmine istanbul
Тип | Стабильность | Определение |
---|---|---|
Unix-сокет или Windows-сокет | Стабильный | Обеспечивает молниеносную связь между Linux, Mac и Windows и позволяет избежать необходимости использования сетевой карты, что снижает накладные расходы и задержки. Примеры локальных сокетов Unix и Windows |
TCP-сокет | Стабильный | Обеспечивает максимально надежную связь в сети. Может также использоваться для локального IPC, но медленнее, чем реализация Unix Socket №1, поскольку TCP-сокеты проходят через сетевую карту, а Unix-сокеты и Windows-сокеты — нет. Примеры TCP-сокетов локальной или удаленной сети |
TLS-сокет | Стабильный | Настраиваемый и безопасный сетевой сокет через SSL. Эквивалент https. Документация TLS/SSL |
UDP-сокеты | Стабильный | Обеспечивает самую быструю сетевую связь . UDP менее надежен, но намного быстрее TCP. Его лучше всего использовать для потоковой передачи некритических данных, таких как звук, видео или данные многопользовательских игр, поскольку он может отбрасывать пакеты в зависимости от сетевого подключения и других факторов. UDP также можно использовать для локального IPC, но он медленнее, чем реализация сокетов Unix или Windows Socket # 1, поскольку сокеты UDP проходят через сетевую карту, а сокеты Unix и Windows - нет. Примеры сокетов UDP локальной или удаленной сети |
ОС | Поддерживаемые сокеты |
---|---|
Линукс | Unix, Posix, TCP, TLS, UDP |
Мак | Unix, Posix, TCP, TLS, UDP |
Победить | Windows, TCP, TLS, UDP |
ipc.config
Установите эти переменные в области ipc.config
, чтобы перезаписать или установить значения по умолчанию.
{
appspace : 'app.' ,
socketRoot : '/tmp/' ,
id : os . hostname ( ) ,
networkHost : 'localhost' , //should resolve to 127.0.0.1 or ::1 see the table below related to this
networkPort : 8000 ,
readableAll : false ,
writableAll : false ,
encoding : 'utf8' ,
rawBuffer : false ,
delimiter : 'f' ,
sync : false ,
silent : false ,
logInColor : true ,
logDepth : 5 ,
logger : console . log ,
maxConnections : 100 ,
retry : 500 ,
maxRetries : false ,
stopRetrying : false ,
unlink : true ,
interfaces : {
localAddress : false ,
localPort : false ,
family : false ,
hints : false ,
lookup : false
}
}
переменная | документация |
---|---|
пространство приложений | используется для пространства имен Unix Socket (Unix Domain Socket). Если не задано специально, сокет домена Unix объединит сокет, пространство приложения и идентификатор, чтобы сформировать путь к сокету Unix для создания или привязки. Это доступно, если в вашей системе работает много приложений, у вас может быть несколько сокетов с одним и тем же идентификатором, но если вы измените пространство приложений, у вас все равно будут уникальные сокеты для конкретных приложений. |
сокетрут | каталог, в котором необходимо создать или привязать к Unix Socket |
идентификатор | идентификатор этого сокета или службы |
сетевойхост | локальный или удаленный хост, к которому должны подключаться сокеты TCP, TLS или UDP. |
сетевой порт | порт по умолчанию, к которому должны подключаться сокеты TCP, TLS или UDP |
читаемыеВсе | делает канал доступным для чтения всем пользователям, включая службы Windows |
записываемыеВсе | делает канал доступным для записи для всех пользователей, включая службы Windows |
кодирование | кодировка по умолчанию для данных, отправляемых через сокеты. Чаще всего используется, если для параметра rawBuffer установлено значение true. Допустимые значения: ascii utf8 utf16le ucs2 base64 hex . |
сыройбуфер | если это правда, данные будут отправляться и получаться как необработанный Buffer узла, а не как Object в формате JSON. Это отлично подходит для двоичного или шестнадцатеричного IPC и взаимодействия с другими процессами на таких языках, как C и C++. |
разделитель | разделитель в конце каждого пакета данных. |
синхронизировать | синхронные запросы. Клиенты не будут отправлять новые запросы, пока сервер не ответит. |
тихий | включить/выключить ведение журнала, по умолчанию установлено значение false, что означает, что ведение журнала включено |
logInColor | включить/выключить цвета util.inspect для ipc.log |
logDepth | установите глубину для util.inspect во время ipc.log |
лесоруб | функция, получающая выходные данные из ipc.log; должен принимать один строковый аргумент |
МаксСоединения | это максимальное количество подключений, разрешенных к сокету. В настоящее время он устанавливается только на сокетах Unix. Другие типы сокетов используют системные настройки по умолчанию. |
повторить попытку | это время в миллисекундах, которое клиент будет ждать перед попыткой повторного подключения к серверу в случае потери соединения. Это не влияет на сокеты UDP, поскольку они не имеют отношения клиент-сервер, как сокеты Unix и сокеты TCP. |
maxRetries | если установлено, оно представляет максимальное количество повторных попыток после каждого отключения, прежде чем сдаться и полностью уничтожить определенное соединение. |
стопПовторить попытку | По умолчанию установлено значение false, что означает, что клиенты будут продолжать повторять попытки подключения к серверам в течение неопределенного времени с интервалом повтора. Если установлено любое число, клиент прекратит повторные попытки, если это число будет превышено после каждого отключения. Если установлено значение true в режиме реального времени, попытки подключения будут немедленно прекращены независимо от maxRetries. Если установлено значение 0, клиент НЕ будет пытаться повторно подключиться. |
отсоединить | По умолчанию установлено значение true, что означает, что модуль позаботится об удалении сокета IPC перед запуском. Если вы используете node-ipc в кластерной среде, где в одном сокете будет несколько прослушивателей, вы должны установить для этого параметра значение false , а затем позаботиться об удалении сокета в своем собственном коде. |
интерфейсы | в основном используется при указании интерфейса, через который должен подключаться клиент. см. документацию по сокету.connect в API node.js. |
Эти методы доступны в рамках IPC.
ipc.log(a,b,c,d,e...);
ipc.log принимает любое количество аргументов, и если ipc.config.silent
не установлен, он объединяет их все с помощью одного пробела между ними, а затем записывает их на консоль. Это быстро, поскольку предотвращает любую конкатенацию, если для ipc.config.silent установлено значение true
. Таким образом, если вы оставите ведение журнала на месте, оно практически не повлияет на производительность.
Журнал также использует util.inspect. Вы можете контролировать, должен ли он регистрироваться в цвете, глубине журнала и месте назначения через ipc.config
ipc . config . logInColor = true ; //default
ipc . config . logDepth = 5 ; //default
ipc . config . logger = console . log . bind ( console ) ; // default
ipc.connectTo(id,path,callback);
Используется для подключения в качестве клиента к локальным сокетам Unix и Windows. Это самый быстрый способ взаимодействия процессов на одном компьютере , поскольку он обходит сетевую карту, которую должны использовать оба TCP и UDP.
переменная | необходимый | определение |
---|---|---|
идентификатор | необходимый | — это строковый идентификатор сокета, к которому осуществляется подключение. Сокет с этим идентификатором добавляется к объекту ipc.of при создании. |
путь | необязательный | — это путь к файлу сокета домена Unix. Если используется система Windows, он будет автоматически преобразован в соответствующий канал с той же информацией, что и файл сокета домена Unix. Если не установлено, по умолчанию будет ipc.config.socketRoot + ipc.config.appspace + id |
перезвонить | необязательный | это функция, которая выполняется при создании сокета. |
Аргументы примеров можно опускать, если они все еще в порядке.
ipc . connectTo ( 'world' ) ;
или используя только идентификатор и обратный вызов
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'hello' ,
function ( data ) {
ipc . log ( data . debug ) ;
//if data was a string, it would have the color set to the debug style applied to it
}
)
}
) ;
или явно задав путь
ipc . connectTo (
'world' ,
'myapp.world'
) ;
или явно задав путь с обратным вызовом
ipc . connectTo (
'world' ,
'myapp.world' ,
function ( ) {
...
}
) ;
ipc.connectToNet(id,host,port,callback)
Используется для подключения в качестве клиента к сокету TCP или TLS через сетевую карту. Это может быть локально или удаленно. Если локально, вместо этого рекомендуется использовать реализацию connectTo
для Unix и Windows, поскольку это намного быстрее, поскольку полностью исключает сетевую карту.
Для TLS и SSL-сокетов см. документацию node-ipc TLS и SSL. У них есть несколько дополнительных требований и вещей, о которых нужно знать, и поэтому у них есть собственный документ.
переменная | необходимый | определение |
---|---|---|
идентификатор | необходимый | — это строковый идентификатор сокета, к которому осуществляется подключение. Для сокетов TCP и TLS этот идентификатор добавляется к объекту ipc.of , когда сокет создается со ссылкой на сокет. |
хозяин | необязательный | — это хост, на котором находится сокет TCP или TLS. По умолчанию это будет ipc.config.networkHost , если не указано иное. |
порт | необязательный | порт, на котором находится сокет TCP или TLS. |
перезвонить | необязательный | это функция, которая выполняется при создании сокета. |
Аргументы примеров можно опускать, если они все еще в порядке.
Таким образом, хотя по умолчанию используется: (id,host,port,callback), следующие примеры все равно будут работать, поскольку они все еще в порядке (id,port,callback) или (id,host,callback) или (id,port) и т. д. .
ipc . connectToNet ( 'world' ) ;
или используя только идентификатор и обратный вызов
ipc . connectToNet (
'world' ,
function ( ) {
...
}
) ;
или явно задав хост и путь
ipc . connectToNet (
'world' ,
'myapp.com' , serve ( path , callback )
3435
) ;
или только явно устанавливая порт и обратный вызов
ipc . connectToNet (
'world' ,
3435 ,
function ( ) {
...
}
) ;
ipc.disconnect(id)
Используется для отключения клиента от сокета Unix, Windows, TCP или TLS. Сокет и его ссылка будут удалены из памяти и области действия ipc.of
Это может быть локально или удаленно. UDP-клиенты не поддерживают соединения, поэтому клиентов нет, и этот метод не имеет для них никакой ценности.
переменная | необходимый | определение |
---|---|---|
идентификатор | необходимый | — строковый идентификатор сокета, от которого необходимо отключиться. |
примеры
ipc . disconnect ( 'world' ) ;
ipc.serve(path,callback);
Используется для создания локального сервера сокетов Unix или сервера сокетов Windows, к которому могут привязываться клиенты. Сервер может emit
события определенным клиентским сокетам или broadcast
события всем известным клиентским сокетам.
переменная | необходимый | определение |
---|---|---|
путь | необязательный | Это путь к файлу сокета домена Unix. Если используется система Windows, он будет автоматически преобразован в соответствующий канал с той же информацией, что и файл сокета домена Unix. Если не установлено, по умолчанию будет ipc.config.socketRoot + ipc.config.appspace + id |
перезвонить | необязательный | Это функция, которую нужно вызвать после запуска Сервера. Это также можно сделать, привязав событие к начальному событию, например ipc.server.on('start',function(){}); |
Аргументы примеров можно опускать, если они в порядке.
ipc . serve ( ) ;
или указать обратный вызов
ipc . serve (
function ( ) { ... }
) ;
или укажите путь
ipc . serve (
'/tmp/myapp.myservice'
) ;
или указать все
ipc . serve (
'/tmp/myapp.myservice' ,
function ( ) { ... }
) ;
serveNet(host,port,UDPType,callback)
Используется для создания сервера сокетов TCP, TLS или UDP, к которому могут привязываться клиенты или на которые другие серверы могут отправлять данные. Сервер может emit
события определенным клиентским сокетам или broadcast
события всем известным клиентским сокетам.
переменная | необходимый | определение |
---|---|---|
хозяин | необязательный | Если не указано, по умолчанию используется первый адрес в os.networkInterfaces(). Для серверов TCP, TLS и UDP это, скорее всего, будет 127.0.0.1 или ::1. |
порт | необязательный | Порт, к которому будет привязан сервер сокетов TCP, UDP или TLS. По умолчанию это значение 8000, если не указано иное. |
UDP-тип | необязательный | Если установлено, сервер будет создан как сокет UDP. «udp4» или «udp6» — допустимые значения. По умолчанию этот параметр не установлен. При использовании udp6 обязательно укажите действительный хост IPv6, например ::1 |
перезвонить | необязательный | Функция, вызываемая при создании сервера |
Аргументы примеров можно опускать, если они все еще в порядке.
TCP-сервер по умолчанию
ipc . serveNet ( ) ;
udp-сервер по умолчанию
ipc . serveNet ( 'udp4' ) ;
или указать TCP-сервер с обратным вызовом
ipc . serveNet (
function ( ) { ... }
) ;
или указать UDP-сервер с обратным вызовом
ipc . serveNet (
'udp4' ,
function ( ) { ... }
) ;
или укажите порт
ipc . serveNet (
3435
) ;
или указав всё TCP
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
function ( ) { ... }
) ;
или указав всё UDP
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
'udp4' ,
function ( ) { ... }
) ;
переменная | определение |
---|---|
ipc.of | Здесь будут храниться ссылки на соединения сокетов при подключении к ним в качестве клиента через ipc.connectTo или iupc.connectToNet . Они будут храниться на основе идентификатора, использованного для их создания, например: ipc.of.mySocket. |
ipc.сервер | Это ссылка на сервер, созданный ipc.serve или ipc.serveNet |
метод | определение |
---|---|
начинать | начать обслуживание, необходимо сначала позвонить serve или serveNet чтобы настроить сервер |
останавливаться | закройте сервер и прекратите обслуживание |
название события | параметры | определение |
---|---|---|
ошибка | ошибка объекта | срабатывает при возникновении ошибки |
соединять | срабатывает при подключении сокета | |
отключиться | запускается клиентом, когда сокет отключился от сервера | |
сокет.отключен | сокет уничтоженSocketID | запускается сервером, когда клиентский сокет отключился |
разрушать | срабатывает, когда сокет полностью уничтожен, дальнейших автоматических повторов не происходит, и все ссылки исчезают. | |
данные | буфер | срабатывает, когда ipc.config.rawBuffer имеет значение true и получено сообщение. |
тип вашего мероприятия | данные вашего мероприятия | срабатывает при получении сообщения JSON. Имя события будет строкой типа из вашего сообщения, а параметром будет объект данных из вашего сообщения, например: { type:'myEvent',data:{a:1}} |
Иногда вам могут понадобиться явные и независимые экземпляры node-ipc. Именно для таких сценариев мы предоставили основной класс IPC в синглтоне IPC.
import { IPCModule } from 'node-ipc' ;
const ipc = new RawIPC ;
const someOtherExplicitIPC = new RawIPC ;
//OR
const ipc = from 'node-ipc' ) ;
const someOtherExplicitIPC = new ipc . IPC ;
//setting explicit configs
//keep one silent and the other verbose
ipc . config . silent = true ;
someOtherExplicitIPC . config . silent = true ;
//make one a raw binary and the other json based ipc
ipc . config . rawBuffer = false ;
someOtherExplicitIPC . config . rawBuffer = true ;
someOtherExplicitIPC . config . encoding = 'hex' ;
Вы можете найти расширенные примеры в папке примеров. В примерах вы найдете более сложные демонстрации, включая примеры с несколькими клиентами.
Сервер — это процесс, поддерживающий открытым сокет для IPC. Несколько сокетов могут подключаться к этому серверу и взаимодействовать с ним. Он также может транслироваться всем клиентам или отправляться конкретному клиенту. Это самый простой пример, который будет работать для локальных сокетов Unix и Windows, а также для локальных или удаленных сетевых TCP-сокетов.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serve (
function ( ) {
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message : ' . debug , data ) ;
ipc . server . emit (
socket ,
'message' , //this can be anything you want so long as
//your client knows.
data + ' world!'
) ;
}
) ;
ipc . server . on (
'socket.disconnected' ,
function ( socket , destroyedSocketID ) {
ipc . log ( 'client ' + destroyedSocketID + ' has disconnected!' ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
Клиент подключается к сокету серверов для межпроцессного взаимодействия. Сокет будет получать события, отправленные ему конкретно, а также события, которые транслируются в сокет сервером. Это самый простой пример, который будет работать как для локальных сокетов Unix, так и для локальных или удаленных сетевых TCP-сокетов.
import ipc from 'node-ipc' ;
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . log ( '## connected to world ##' . rainbow , ipc . config . delay ) ;
ipc . of . world . emit (
'message' , //any event or message type your server listens for
'hello'
)
}
) ;
ipc . of . world . on (
'disconnect' ,
function ( ) {
ipc . log ( 'disconnected from world' . notice ) ;
}
) ;
ipc . of . world . on (
'message' , //any event or message type your server listens for
function ( data ) {
ipc . log ( 'got a message from world : ' . debug , data ) ;
}
) ;
}
) ;
UDP-сокеты отличаются от сокетов Unix, Windows и TCP, поскольку для получения сообщений они должны быть привязаны к уникальному порту на своем компьютере. Например, клиент TCP, Unix или Windows Socket может просто подключиться к отдельному серверу TCP, Unix или Windows Socket. Затем этот клиент мог обмениваться как отправкой, так и получением данных по порту или местоположению серверов. UDP-сокеты не могут этого сделать. Они должны привязаться к порту для получения или отправки данных.
Это означает, что UDP-клиент и сервер — это одно и то же, поскольку для получения данных UDP-сокет должен иметь собственный порт для приема данных, и только один процесс может использовать этот порт одновременно. Это также означает, что для emit
или broadcast
данных UDP-серверу необходимо знать хост и порт сокета, на который он намерен передавать данные.
Это самый простой пример, который будет работать как для локальных, так и для удаленных сокетов UDP.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
'udp4' ,
function ( ) {
console . log ( 123 ) ;
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
ipc . server . emit (
socket ,
'message' ,
{
from : ipc . config . id ,
message : data . message + ' world!'
}
) ;
}
) ;
console . log ( ipc . server ) ;
}
) ;
ipc . server . start ( ) ;
Обратите внимание, что мы установили здесь порт 8001, поскольку мировой сервер уже использует порт ipc.config.networkPort по умолчанию, равный 8000. Таким образом, мы не можем привязаться к 8000, пока мир его использует.
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
8001 ,
'udp4' ,
function ( ) {
ipc . server . on (
'message' ,
function ( data ) {
ipc . log ( 'got Data' ) ;
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
}
) ;
ipc . server . emit (
{
address : '127.0.0.1' , //any hostname will work
port : ipc . config . networkPort
} ,
'message' ,
{
from : ipc . config . id ,
message : 'Hello'
}
) ;
}
) ;
ipc . server . start ( ) ;
Двоичные или буферные сокеты можно использовать с любым из вышеперечисленных типов сокетов, однако способ генерации событий данных немного отличается. Они могут пригодиться при работе со встроенными системами или процессами C/C++. Вы даже можете убедиться, что типизация строк соответствует C или C++.
При настройке сокета rawBuffer вы должны указать его как таковой:
ipc . config . rawBuffer = true ;
Вы также можете указать тип кодировки. По умолчанию — utf8
ipc . config . encoding = 'utf8' ;
выдать строковый буфер:
//server
ipc . server . emit (
socket ,
'hello'
) ;
//client
ipc . of . world . emit (
'hello'
)
выдавать буфер массива байтов:
//hex encoding may work best for this.
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 10 , 20 , 30 ]
) ;
//client
ipc . server . emit (
[ 10 , 20 , 30 ]
) ;
выдавать буфер двоичного или шестнадцатеричного массива, это лучше всего подходит для передачи данных в реальном времени, особенно при подключении к процессам C или C++ или встроенным системам:
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 0x05 , 0x6d , 0x5c ]
) ;
//client
ipc . server . emit (
[ 0x05 , 0x6d , 0x5c ]
) ;
Запись явных буферов, типов int, двойных значений, чисел с плавающей запятой и т. д., а также данных с прямым и прямым порядком байтов в необработанный буфер, что особенно ценно при подключении к процессам C или C ++ или встроенным системам (см. более подробную информацию о буферах, а также UInt, Int , double и т. д. здесь)[https://nodejs.org/api/buffer.html]:
ipc . config . encoding = 'hex' ;
//make a 6 byte buffer for example
const myBuffer = Buffer . alloc ( 6 ) . fill ( 0 ) ;
//fill the first 2 bytes with a 16 bit (2 byte) short unsigned int
//write a UInt16 (2 byte or short) as Big Endian
myBuffer . writeUInt16BE (
2 , //value to write
0 //offset in bytes
) ;
//OR
myBuffer . writeUInt16LE ( 0x2 , 0 ) ;
//OR
myBuffer . writeUInt16LE ( 0x02 , 0 ) ;
//fill the remaining 4 bytes with a 32 bit (4 byte) long unsigned int
//write a UInt32 (4 byte or long) as Big Endian
myBuffer . writeUInt32BE (
16772812 , //value to write
2 //offset in bytes
) ;
//OR
myBuffer . writeUInt32BE ( 0xffeecc , 0 )
//server
ipc . server . emit (
socket ,
myBuffer
) ;
//client
ipc . server . emit (
myBuffer
) ;
cluster
node-ipc
можно использовать с модулем кластера Node.js, чтобы обеспечить возможность иметь несколько устройств чтения для одного сокета. Для этого вам просто необходимо установить для свойства unlink
в конфигурации значение false
и позаботиться об отключении пути сокета в главном процессе:
import fs from 'fs' ;
import ipc from 'node-ipc' ;
import { cpus } from 'os' ;
import cluster from 'cluster' ;
const cpuCount = cpus ( ) . length ;
const socketPath = '/tmp/ipc.sock' ;
ipc . config . unlink = false ;
if ( cluster . isMaster ) {
if ( fs . existsSync ( socketPath ) ) {
fs . unlinkSync ( socketPath ) ;
}
for ( let i = 0 ; i < cpuCount ; i ++ ) {
cluster . fork ( ) ;
}
} else {
ipc . serve (
socketPath ,
function ( ) {
ipc . server . on (
'currentDate' ,
function ( data , socket ) {
console . log ( `pid ${ process . pid } got: ` , data ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
console . log ( `pid ${ process . pid } listening on ${ socketPath } ` ) ;
}
import fs from 'fs' ;
import ipc from 'node-ipc' ;
const socketPath = '/tmp/ipc.sock' ;
//loop forever so you can see the pid of the cluster sever change in the logs
setInterval (
function ( ) {
ipc . connectTo (
'world' ,
socketPath ,
connecting
) ;
} ,
2000
) ;
function connecting ( socket ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . of . world . emit (
'currentDate' ,
{
message : new Date ( ) . toISOString ( )
}
) ;
ipc . disconnect ( 'world' ) ;
}
) ;
}
См. файл лицензии MIT.
Мне жаль.