如何使用 python 连接不同主机上应用程序 运行 的外部端口?

How do I connect external ports on applications running on different hosts using python?

我已经使用 python 脚本在单个主机上的不同域和节点中成功连接应用程序 运行ning 上的外部端口 uses-component.connect(provides-component>, providesPortName ="portName") 但我现在想在另一台主机上部署一个应用程序,但出现错误。我使用 nodeBooter 启动远程域和节点,可以使用本地 python 来控制它并启动波形并启动它,但是如果我 运行 python 在使用端口主机上它不能 redhawk.attach() 到提供端口主机上的域。错误是 StandardError: Did not find domain 。该域在另一台主机上 运行ning 并且 nameclt 列表可以看到它,因此命名服务已正确连接。这应该是可能的,我只是遗漏了一些东西,或者在不同主机上的域之间建立外部连接有问题吗?

我将使用 docker 来模拟您的环境。希望我正确理解你的情况。我有3台机器。 A、B 和 C。A 和 B 各有自己的域、GPP 和 运行 波形。在我的例子中,A 和 B 是 docker 个容器。 C 将用于联系 A 和 B 并与之互动。

这些图像是 public,所以如果您安装了 docker,请随时跟进。

机器A(IP地址172.17.0.3)

# Launch our 2.0.2 container
[ylb@axios]$docker run -it --rm axios/redhawk:2.0.2 bash -l

# Install a test waveform
[redhawk@6b0701e76e74 ~]$ sudo yum install -y rh.FM_mono_demo

# Start the omni services
[redhawk@6b0701e76e74 ~]$ sudo $OSSIEHOME/bin/cleanomni

# Start domain and dev manager
[redhawk@6b0701e76e74 ~]$ nodeBooter --daemon -D
[redhawk@6b0701e76e74 ~]$ nodeBooter --daemon -d $SDRROOT/dev/nodes/DevMgr_12ef887a9000/DeviceManager.dcd.xml

# Launch the waveform via python
[redhawk@6b0701e76e74 ~]$ python
>>> from ossie.utils import redhawk
>>> dom = redhawk.attach()
>>> app = dom.createApplication('/waveforms/rh/FM_mono_demo/FM_mono_demo.sad.xml')

我们对机器 B 执行完全相同的步骤,其 IP 为 172.17.0.2。确保不要关闭或退出这些终端,将它们留在 python shell.

现在在主机 C 上,我们可以跳转到 python,连接到每个域,然后建立连接。

[ylb@axios]$python
>>> from ossie.utils import redhawk
>>> dom1 = redhawk.attach('REDHAWK_DEV', '172.17.0.3')
>>> dom2 = redhawk.attach('REDHAWK_DEV', '172.17.0.2')
>>> app1 = dom1.apps[0]
>>> app2 = dom2.apps[0]
>>> app1.comps[0].name
'rh.TuneFilterDecimate'
>>> tfd1 = app1.comps[0]
>>> app2.comps[1].name
'rh.psd'
>>> psd2 = app2.comps[1]
>>> tfd1.connect(psd2)

所以我们有 3 台机器,A、B 和 C。A 和 B 每个 运行 一个波形,我们从机器 C 将机器 A 上的 TFD 组件 运行 连接到 PSD 组件运行 在机器 B 上。