跳转到内容

ACE+TAO 开源编程笔记/处理 IOR

来自维基教科书,开放的书籍,为开放的世界

如前所述,直接使用 IOR 字符串来连接客户端和服务器并不是首选方法,无法让双方进行通信。在生产环境中,通常使用命名服务。它既可以用来发布服务的地址,又可以用来保持服务的有效 IOR 不变。如果您多次运行之前的服务器示例,您可能会注意到 IOR 字符串往往会发生变化。使用这种方法,您可以确保一致性和可读性。

CORBA 程序用来执行地址注册和查找的底层基础设施是命名服务。对于 TAO,命名服务是用几个命令行参数启动的。在下面的示例中,参数 "-ORBEndPoint" 用于定义服务监听的位置,参数 "-ORBDaemon" 用于强制守护进程真正像守护进程一样运行。奇怪的是,您使用 TAO 编译的所有服务(守护进程)实际上都不会像守护进程一样运行,除非您使用此可选参数。

端点对于运行任何 TAO 服务或已编译的客户端/服务器应用程序至关重要。如果您不提供端点,默认端点是多播端点。此默认端点被描述为对性能不是问题或用于测试的应用程序很有用。话虽如此,这位作者无法在标准 Linux FC4 系统上使多播 IIOP 端点工作,即使 Linux 系统保证多播正在运行。我能够通过在 ACE 框架测试目录下运行多播测试应用程序来验证此错误。为了确保任何阅读本文的人都能启动并运行,我们将设置一个具有显式定义的端点 "localhost" 的客户端。

此端点有两种基本形式,一种是服务发布其服务,另一种是客户端尝试查找服务。为了使讨论更直观,我们将假设在每个示例中,命名服务服务器都在运行,并且可以从您的测试机器访问。要启动命名服务,请尝试以下操作

Naming_Service -ORBEndPoint iiop://127.0.0.1:12345 -ORBDaemon

这将在 localhost 接口的端口 12345 上设置您的命名服务。要测试其是否已启动并运行,请尝试以下操作

nslist -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService

这将生成以下输出

Naming Service:
---------

这表明您的命名服务已启动并运行,但尚未报告任何服务。要查看服务的示例,请尝试使用以下命令启动事件服务(我们将在后面的示例中使用它)

CosEvent_Service -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService -ORBDaemon

现在,当您再次运行 nslist 时,您将看到以下输出

Naming Service:
---------
  CosEventService: object reference:   Protocol: IIOP,   Endpoint: 10.0.0.53:32802

最后,我们有一组正常工作的服务器,它们通过 IIOP 端点连接在一起。当您将客户端和服务器连接在一起时,您将使用相同的过程... 启动命名服务器,可能启动事件服务(或其他服务),然后启动客户端和服务器。对于 Linux,与 ACE+TAO 项目相关的开发人员提供了包含脚本文件的 RPM 软件包,这些脚本文件旨在与 Linux 的引导设施交互,这些设施将自动启动命名服务(和其他服务)。

华夏公益教科书