繁体   English   中英

Java中的ZeroMQ端口转发

[英]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:5570tcp://*: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 AZeroMQ通信模式透明地“讲话”到本地端口5570 ,这是通过ssh -tunnel服务转发到主机B的另一端,并传递到那里引用的端口5570进行进一步的套接字通信处理的。

host B 192.168.78.15ZeroMQ通信模式通过端口5570无缝“交互”,就像通信对方“坐在”同一“盒子”一样,并处理通过ssh -tunnel实际传递的套接字通信,不知道这样的把戏。

QED。


为了使原型制作更快,更容易,可以选择使用.socket(ZMQ.PAIR)原型,该原型不会引入任何高级ZeroMQ行为模式,而只是将套接字指示发送的任何内容发送到另一侧(没有任何等待REP -reply现有REQ -message)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM