我正在尝试使用在不同机器上运行的组件运行波形。也就是说,我想要 A->B,其中组件 A 在机器 1 上的 GPP 上运行,组件 B 在机器 2 上的 GPP 上运行。系统 A 上的 CORBA 名称服务器在系统 B 上的 REDHAWK 中可见,但我无法访问远程设备或运行波形时的组件。如何使一台机器上的设备对另一台机器上运行的 REDHAWK 可用?
感谢您的协助!
-杰希尔
我正在尝试使用在不同机器上运行的组件运行波形。也就是说,我想要 A->B,其中组件 A 在机器 1 上的 GPP 上运行,组件 B 在机器 2 上的 GPP 上运行。系统 A 上的 CORBA 名称服务器在系统 B 上的 REDHAWK 中可见,但我无法访问远程设备或运行波形时的组件。如何使一台机器上的设备对另一台机器上运行的 REDHAWK 可用?
感谢您的协助!
-杰希尔
在多台机器上传播 REDHAWK 组件和设备的基本要素是确保您的 CORBA 通信在机器之间正常工作。这通常相当于正确配置 /etc/omniORB.cfg。首先,在一台机器上,您应该运行 omniNames 和 omniEvents,并按照文档的第 2.6 节设置您的配置。以供参考:
InitRef = NameService=corbaname::127.0.0.1
InitRef = EventService=corbaloc::127.0.0.1:11169/omniEvents
在第二台机器上,您的 InitRef 必须指向第一台机器。如果第一台机器是 192.168.1.100,那么你的第二台机器的配置可能包含:
InitRef = NameService=corbaname::192.168.1.100
InitRef = EventService=corbaloc::192.168.1.100:11169/omniEvents
您应该能够验证这在第二台机器上是否正常工作:
$ nameclt list
您需要解决的下一个问题是确保 CORBA 对象正在侦听适当的网络接口,并在其 IOR 中发布允许访问它们的信息。在您的每个配置文件中,我建议您添加一行来告诉omniORB 在该机器上创建的端点CORBA 对象应该监听哪些端点。例如,在您的第一台机器上:
endPoint = giop:tcp:192.168.1.100:
endPoint = giop:unix:
这告诉 omniORB CORBA 对象应该在 192.168.1.100 上选择的 TCP 端口上进行侦听。它还添加了一个 Unix 管道,以便同一台机器上的对象快速访问。omniORB 将在该对象的 IOR 中发布此信息。您在此处选择的内容很重要——如果您使用其他机器无法访问的 IP,或者使用其他机器无法解析的主机名,那么 CORBA 连接将失败。
在两台机器上配置完 endPoint 设置后,您可能会发现检查 IOR 中包含的信息很有用。如果您可以访问命名服务,那么您可以检索对象的 IOR。例如,如果您有一个名为“REDHAWK_DEV”的域正在运行,您可以通过以下方式获取域管理器的 IOR:
$ nameclt resolve REDHAWK_DEV/REDHAWK_DEV
然后,将 IOR 输入 catio:
$ catior IOR:012345...
catior 将为您解密 IOR 并向您显示客户端将连接到的地址和端口。
基于 B 上的程序可以看到 A 上的名称服务这一事实,我认为问题与设备/设备管理器配置有关。
确保 B 上的设备管理器满足以下条件:
如果满足这些条件并且您的系统仍然无法工作,请从命令行运行 nodeBooter 为未注册的设备管理器和您尝试注册的域管理器发布标准输出。