【问题标题】:C++ RPC tutorial? [closed]C++ RPC 教程? [关闭]
【发布时间】:2010-12-07 18:52:49
【问题描述】:

我想学习在 Windows 平台上编程 C++ (native) 进行 RPC 通信。我想学习服务器端和客户端。我还想学习一些高级主题,例如性能和安全性。

有什么好的推荐读物吗?

(顺便说一句:我在 Google 上搜索了一些,但它们都太简短或与 COM 相关,我想学习没有 COM 的纯 RPC 编程。我正在使用带有 C++ 的 VSTS 2008。)

【问题讨论】:

  • 我不是在编程socket,而是在开发RPC客户端和服务器。根据我在问题中的观点,有什么推荐的读物吗?
  • 您在看 REST 还是 SOAP?还有其他的,但这些是流行的。
  • 不,我正在寻找 RPC,纯 RPC 编程。有什么推荐的读物吗?
  • 嗯,你需要一个协议来执行 RPC……这就是 SOAP 和 REST:程序相互通信以执行 RPC 的方式。
  • 我知道 SOAP/REST 可以做同样的事情,但我正在维护一个使用 RPC 的遗留系统。那么,有什么推荐的教程吗?

标签: c++ visual-c++ visual-studio-2008 rpc


【解决方案1】:

我会从Platform SDK samples on RPC开始。

  • ASYNCRPC 说明了使用异步远程过程调用的 RPC 应用程序的结构。它还演示了通知呼叫完成的各种方法。
  • CLUUID 演示了使用客户端对象 UUID 使客户端能够从远程过程的多个实现中进行选择。
  • DATA 目录包含四个程序:
    • DUNION 说明了区分(非封装)联合;
    • INOUT 演示[in]、[out]参数;
    • REPAS 演示了represent_as 属性;
    • XMIT 演示了 transmit_as 属性。
  • DYNEPT 演示了一个客户端应用程序通过动态端点管理其与服务器的连接。
  • FILEREP 目录包含四个示例,说明开发人员如何编写简单的文件复制服务、多用户文件复制服务、支持安全功能的服务和使用 RPC 异步管道的服务。
  • HANDLES目录包含三个程序,AUTO、CXHNDL、USRDEF,分别演示auto_handle、[context_handle]和通用(用户定义)句柄。
  • HELLO 是“Hello, world”的客户端/服务器实现。
  • PICKLE 目录包含两个程序:
    • PICKLP 演示数据程序序列化;
    • PICKLT 演示数据类型序列化;两个程序都使用 [encode] 和 [decode] 属性。
  • PIPES 演示了管道类型构造函数的使用。
  • RPCVSC 演示了使用 RPC 实现服务。
  • STROUT 演示了如何在服务器上为二维对象(指针数组)分配内存并将其作为 [out]-only 参数传递回客户端。然后客户端释放内存。这种技术允许存根调用服务器而不事先知道将返回多少数据。

【讨论】:

  • 谢谢谢伊!您推荐的链接确实包含很好的代码示例。除了代码示例,我还需要一个全面的文档,描述 RPC 编程、内部原理、技巧等。除了代码,还有什么推荐的文档吗?
  • 嗯,有 MSDN,还有一些旧书,但是 RPC 在很多方面已经死了:大多数人将使用 DCOM\Com+\ServicedComponent(基于 RPC)和真正酷的孩子正在玩 WCF。
  • 我同意。但是由于我正在维护一些使用 RPC 的遗留系统,所以我必须使用和学习 RPC。有什么推荐的读物(我需要学习一些背景知识,以帮助我理解你提到的优秀 RPC 示例)?
【解决方案2】:

试试这个:

Overview

Technical Reference - 还描述了它是什么以及它是如何工作的

【讨论】:

    【解决方案3】:

    为什么要学习“原始”RPC?有许多好的更高级别的 RPC 实现:

    1. CORBA 实现
    2. google's protocol buffers
    3. Thrift

    【讨论】:

    • 我正在与一些使用 RPC 作为编程协议的遗留系统集成。那么,有没有关于这个主题的推荐读物?
    【解决方案4】:

    你可能需要学习 3 种不同的东西:

    • C++ 编程语言
    • RPC
    • 一些 C++ RPC 库

    【讨论】:

    • 是的,根据我在问题中的观点,有什么推荐的读物吗?
    【解决方案5】:

    RPC == "远程过程调用"

    本质上,它的想法是两个端点之间的通信最好以这些端点彼此进行逻辑函数调用的概念为模型。通常,一方以某种方式“发布”API(例如,如果您使用 SOAP,通常您将拥有一个名为 WSDL(发音为 wizdel)的文件,该文件枚举您响应的函数……客户端将首先下载您的 WSDL,然后调用您可用的 API)...如今,几乎所有可用的技术都将其特定协议置于 HTTP 之上(例如 Web 服务、UPnP、REST)。这通常意味着您正在服务器是在 Web 服务器之上实现的...

    因此,如果您只需要实现客户端,那么您可能可以使用 libcurl 来满足所有 HTTP 需求...

    【讨论】:

    • 感谢 dicroce!你提到的非常好!作为一个RPC初学者,除了代码示例之外,我还需要一个全面的文档,描述RPC编程,内部,技巧等。除了代码,还有什么推荐的文档吗?
    【解决方案6】:

    看看RCF, Deltavsoft_LinkCodeProject_Link

    主要行为是 RCF 不使用单独的 IDL(接口定义语言)。

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 2011-02-25
      • 2010-09-21
      • 2010-09-23
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多