Я написал самое простое приложение для чата, использующее 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 будет работать и при подключении процессов, не запущенных на той же машине.