Сбой ZeroMQ при подключении bindSync к внешнему компьютеру - PullRequest
0 голосов
/ 11 мая 2019

Я написал самое простое приложение для чата, использующее zeroMQ и стандартный поток вывода / ввода. Это код пользователя1

const zmq = require('zeromq');
const pullSock = zmq.socket('pull');
const pushSock = zmq.socket('push');

if(process.argv.length<5){
  console.log("Missing parameters in cmd.");
  console.log("node message username myIP recieverIP");
  console.log("Example: node my-chat Matt 192.168.1.64 192.168.1.134");
  return;
}

pullSock.connect('tcp://'+process.argv[3]+':3001');
pushSock.bindSync('tcp://'+process.argv[4]+':3000');

console.log('Connected to pull '+process.argv[3]+':3001 and push '+process.argv[4]+':3000');

pullSock.on('message', function(msg){
  console.log(msg.toString());
});

process.stdin.on("data",(data)=>{
  pushSock.send(process.argv[2]+": "+data);}
);

А это код, который запускается на user2:

const zmq = require('zeromq');
const pullSock = zmq.socket('pull');
const pushSock = zmq.socket('push');

if(process.argv.length<5){
    console.log("Missing parameters in cmd.");
    console.log("node send-chat username myIP recieverIP");
    console.log("Example: node send-chat Steph 192.168.1.134 192.168.1.64");
    return;
}

pullSock.connect('tcp://'+process.argv[3]+':3000');
pushSock.bindSync('tcp://'+process.argv[4]+':3001');
console.log('Connected to pull '+process.argv[3]+':3000 and push '+process.argv[4]+':3001');

pullSock.on('message', function(msg){
  console.log(msg.toString());
});

process.stdin.on("data",(data)=>{
    pushSock.send(process.argv[2]+": "+data);
});

Они отличаются только назначением портов.

Если я запускаю их обоих на одной машине, например:

> node my-chat Matt 192.168.1.64 192.168.1.64
> node send-chat Steph 192.168.1.64  192.168.1.64

, связь работает как положено. Если я попытаюсь установить связь между машинами,

> node my-chat Matt 192.168.1.134 192.168.1.64
> node send-chat Steph 192.168.1.64  192.168.1.134

чем это не с ошибкой:

this._zmq.bindSync(addr);
            ^
Error: Can't assign requested address

Что мне здесь не хватает? Я ожидал, что zeroMQ будет работать и при подключении процессов, не запущенных на той же машине.

...