[英]ZeroMQ port-forwarding in Java
我有一个用Java编写的程序,该程序应该通过ZeroMQ
发送消息,以便正在运行的另一个程序进行侦听和响应。
问题是侦听器在本地网络上的另一台计算机上,我需要以某种方式在ZeroMQ
中执行端口转发,以便通过网络接收消息。
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket requester = context.socket(ZMQ.REQ);
requester.connect("tcp://192.168.78.14:5570"); //192.168.78.14 is the address of listening machine
String msg = "Message";
requester.send(msg.getBytes());
byte[] reply = requester.recv();
当上面的代码运行时,程序将无限期地等待响应(永远不会出现),因此实际上是无响应的。 侦听器正在tcp://127.0.0.1:5570
上侦听消息。 将其设置为tcp://0.0.0.0:5570
或tcp://*:5570
(据说该端口打开以侦听给定端口上的所有地址)也不会产生任何结果。
任何帮助表示赞赏。
该解决方案已经在生产中使用了近二十年,因为大批空间分布的虚拟机需要使类似的host:port
会话处于活动状态,而与它们在各个实际网络地址空间中的实际实例化无关
ssh-port-forwarding
隧道 该解决方案原则上独立于ZeroMQ
框架设置。
在您希望的两台主机之间建立实时SSH连接。
在每一端,根据ZeroMQ
通信设置中使用的port#
-s提供相应的端口转发映射。
在host A
192.168.78.14
将本地端口5570
转发到远程IP:port#
目标
L5570 forward to 192.168.78.15:5570
在host A
, ZeroMQ
通信模式透明地“讲话”到本地端口5570
,这是通过ssh
-tunnel服务转发到主机B
的另一端,并传递到那里引用的端口5570
进行进一步的套接字通信处理的。
在host B
192.168.78.15
, ZeroMQ
通信模式通过端口5570
无缝“交互”,就像通信对方“坐在”同一“盒子”一样,并处理通过ssh
-tunnel实际传递的套接字通信,不知道这样的把戏。
QED。
为了使原型制作更快,更容易,可以选择使用.socket(ZMQ.PAIR)
原型,该原型不会引入任何高级ZeroMQ
行为模式,而只是将套接字指示发送的任何内容发送到另一侧(没有任何等待REP
-reply现有REQ
-message)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.