gpt4 book ai didi

java - Java 中的 ZeroMQ 端口转发

转载 作者:行者123 更新时间:2023-12-01 11:02:06 25 4
gpt4 key购买 nike

我有一个用 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 session ,而与它们的实际情况无关。在各自的真实网络地址空间中实例化

<小时/>

在主机之间使用ssh-port-forwarding隧道

该解决方案原则上独立于 ZeroMQ 框架设置。

在您希望的两台主机之间设置实时 SSH 连接。

在每一端,根据 ZeroMQ 中使用的 port#-s 提供相应的端口转发映射 通信设置。

主机 A 192.168.78.14 上将本地端口 5570 转发到远程 IP:port #目标

L5570 forward to 192.168.78.15:5570

主机 A 上,ZeroMQ - 通信模式透明地与本地端口 5570“对话” ,通过ssh隧道的服务转发到另一侧,主机B并传送到那里引用的端口5570 用于进一步的套接字流量处理。

主机 B 192.168.78.15 上,采用 ZeroMQ 无缝通信模式通过端口5570“交互”,就好像通信对方“坐在”同一个“盒子”中一样,并处理通过实际传递的套接字流量>ssh-tunnel,而不知道这样的技巧。

QED。

<小时/>

为了更快、更容易地进行原型(prototype)设计,人们可能会选择使用 .socket(ZMQ.PAIR) 原型(prototype),它不会引入任何高级 ZeroMQ-行为模式,只需发送套接字接口(interface)指示发送到对方的任何内容(无需等待 REP-回复先前的 REQ-消息)

关于java - Java 中的 ZeroMQ 端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com