Я хочу знать причину, по которой он не работает через IPC.
Существует несколько условий использования ipc://
транспортного класса дляиспользуя масштабируемые формальные архетипы ZeroMQ и получаем .bind()/.connect()
-ed
1) Межпроцессный транспорт передает сообщения между локальными процессами, используя системно-зависимый механизм IPC.Межпроцессный транспорт в настоящее время реализован только в операционных системах, которые предоставляют доменные сокеты UNIX.
2) Как со стороны .bind()
, так и со стороны .connect()
необходимо соответствовать нанекоторый выполнимый адрес :
push.bind( 'ipc://push.sock' ); // will never meet its counterparty
// ------------------(--|||://^v^v^v^v^v^v^v )
worker_pull.connect( 'ipc:///tmp/push.sock'); // if used other ipc://-address
3) Если какой-либо второй процесс связывается с конечной точкой, уже связанной процессом, это будет успешно выполнено, и первый процесс потеряет свою привязку.В этом случае транспортный класс ipc://
не согласуется с транспортными классами tcp://
или inproc://
.
4) Путь к адресу конечной точки должен быть доступным для записипроцесс.Когда конечная точка начинается с /, например, ipc: /// pathname, это будет абсолютный путь.Если конечная точка указывает каталог, который не существует, привязка должна завершиться неудачей.
5) Когда имя пути конечной точки начинается с @
, должно использоваться абстрактное пространство имен.Абстрактное пространство имен не зависит от файловой системы, и если процесс попытается связать конечную точку, уже связанную с процессом, произойдет сбой.Подробности смотрите в unix (7).
6) ipc://
Путь к транспортному классу имеет максимальный размер, который зависит от операционной системы.В Linux максимум составляет 113 символов, включая префикс "ipc://
" (107 символов для реального имени пути).
7) Когда в zmq_bind()
использовалась спецификация конечной точки с подстановочным знаком *,вызывающая сторона должна использовать реальную конечную точку, полученную из опции сокета ZMQ_LAST_ENDPOINT
, чтобы отсоединить эту конечную точку от сокета с помощью zmq_unbind()
.