【问题标题】:remote procedure calls远程过程调用
【发布时间】:2010-10-01 13:51:44
【问题描述】:

有人知道在 windows(非 .net)环境中进行远程过程调用的好方法吗?

我找不到太多关于如何操作的信息,而且 msdn 只有 .net 版本。

.

编辑:

感谢到目前为止的回答。我需要的是与同一台计算机上的服务进行通信,该服务会将进度报告发送回“客户端”。我对 rpc 感兴趣的原因是因为 vistas uac 以及服务如何与普通应用程序通信,除非它们使用 rpc 或管道。查看管道,它们似乎完全基于文本,我的印象是 rpc 可以传递强类型值。

我也会研究 DCOM。

【问题讨论】:

    标签: c++ windows rpc


    【解决方案1】:

    如果您只对同一台机器上的进程之间的对话感兴趣,boost::interprocess 是一种很酷的方式,可以让它们通过一个频道进行对话。

    更多特定于 Windows 的解决方案是 shared memory mapped file 和系统全局互斥体/信号或 named pipes

    boost::serialize 和 google protocol buffers 是将您在进程之间发送的数据转换为二进制字符串的方法,这些字符串较少依赖于结构打包和其他可能在不同可执行文件之间有所不同的东西。

    boost::interprocess、boost::serialize 和协议缓冲区应该独立于平台,因此从技术上讲它也可以在 Linux/Mac 上运行!

    【讨论】:

    【解决方案2】:

    DCOM 具有基于 DCE RPC 的远程过程调用机制。如果您将系统构建为 COM 组件或在要公开的 API 上放置 COM 包装器,则可以使用它。除此之外,您可能希望通过更深入地了解问题的细节来扩展您的问题。我真的不知道这个问题是否有任何可能妨碍使用 DCOM 的方面。

    另一种方法是在应用程序周围放置一个 Web 服务包装器。 Web 服务(当然是基于 SOAP 或 XML-RPC 的)实际上只是一种使用 HTTP 作为传输协议的 RPC 机制。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      您可以通过一百种不同的方式在 Windows 上远程调用代码;套接字、DCom 等......微软在某一阶段支持 rpcgen(基于 DCE RPC),它允许您定义远程 API 调用,它的编译器将编写胶水代码。这是 DCOM 中的底层。

      它与更易于使用和更广泛标准的 UNIX ONC-RPC 不兼容。如果 DCOM 之类的东西不适合你,你可能想看看 one of the ONC_RPC toolkits

      托尼

      【讨论】:

        【解决方案5】:

        是的,我同意 Isalamon 的观点 - 只需使用 MIDL 中已经内置的真实 RPC。您可以获得一本关于 DCE RPC 的 O'Reilly 书籍。如果你在同一台机器上,只需使用 ncalrpc 的绑定主机即可。

        【讨论】:

          【解决方案6】:

          Here 是我们 1996 年在 Cheyenne Software 在 Win NT 上用于 InocuLAN 防病毒软件的东西。这是纯 RPC,没有 OO 层。我希望它在较新的 Windows 中仍然可用。

          【讨论】:

            【解决方案7】:

            嗯,按照复杂性、开销和反向速度排序,我想到了这些可能性:

            • SOAP(您已排除)
            • 科尔巴
            • DCOM (DCE)
            • XML 消息交换
            • ONC-RPC (SunRPC)
            • 类似 HTTP 的消息交换
            • 类似 telnet 的消息交换(面向线路)

            总而言之,您将或多或少地准备好使用(准备受挫)库、包等作为开源。

            上面的某些内容可能听起来很奇怪,但实际上,我们确实经常使用 HTTP 或 Telnet 进行 RPC。原因是您不需要花哨的环境来测试,任何大多数外来软件都可以轻松适应它。这些也使您的程序的服务可以轻松地从 WebBrowser、telnet 会话或其他只需打开一个套接字并发送请求的程序中使用。例如,我的大多数程序都包含一个 --scripting 命令行参数,它打开一个 telnet 端口,您可以通过该端口通过类似 JavaScript 的语言发送对整个应用程序对象模型的访问。这也可以用来非常轻松地远程控制任何应用程序 - 不费吹灰之力。如果您曾经编写过这样的框架,那么它可以在每个新应用程序中重复使用(看看它看起来如何here

            我必须承认,我所有的应用程序都是在一个环境中编写的,其中所有上述内容都已包含在内并且可以作为客户端和服务器使用。

            总结:用最简单的东西,就行了。除非您的应用需要集成到这样的基础架构中,否则您不需要 Corba 或 SOAP。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-22
              • 1970-01-01
              • 1970-01-01
              • 2021-07-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多