是否有我可以用来在 C++ 中实现 RPC(客户端-服务器)的设计模式
Posted
技术标签:
【中文标题】是否有我可以用来在 C++ 中实现 RPC(客户端-服务器)的设计模式【英文标题】:Is there design patterns I can use to implement an RPC (client-server) in C++ 【发布时间】:2010-11-03 13:22:02 【问题描述】:我正在开发一个个人项目,它是 C++ 中的 RPC(客户端-服务器)。 RPC 将通过 TCP/IP 或 HTTP 进行通信。 RPC 的规范在这里:
http://groups.google.com/group/json-rpc/web/json-rpc-2-0
我想知道是否有现有的设计模式(或模式组合)可以帮助我产生干净灵活的设计。如果有代码示例、UML 图或文章,我将不胜感激。
谢谢。
【问题讨论】:
这是什么意思?您使用了错误的序列化格式(不是 Soap)和错误的运行时环境(没有反射)。当您有几毫秒的网络延迟时,C++ 的强大功能就无关紧要了。 1) 错误的序列化:因为我比 XML 更喜欢 JSON 语法(不那么冗长)2) 错误的运行时(无反射):我将使用 Qt (doc.qt.nokia.com/4.7/metaobjects.html) >> 这有什么意义?正如我所写:我这样做是为了个人项目。所以,它的主要目的是学习一些新的东西(网络、RPC)。 【参考方案1】:您可能需要在客户端上使用Proxy 来表示您将要调用的任何服务器端方法并使其在本地可调用。
在幕后,Abstract Factory 可用于封装使用已配置或请求的协议(TCP、HTTP)选择的具体网络连接的提供。
【讨论】:
【参考方案2】:我会选择观察者。
Details and diagrams.
【讨论】:
【参考方案3】:不清楚您询问的是高级设计(观察者模式、JSON/XML 处理技术等)、低级设计(套接字、HTTP 客户端/服务器处理等),还是两者兼而有之。
如果对包括可扩展性在内的较低级别方面感兴趣,可能值得研究 ASIO 背后的设计和动机:http://think-async.com/Asio/asio-1.3.1/doc/asio/overview.html。
【讨论】:
更高层次。我将重用现有的库进行 JSON 处理。以上是关于是否有我可以用来在 C++ 中实现 RPC(客户端-服务器)的设计模式的主要内容,如果未能解决你的问题,请参考以下文章