用C++的高级模版特性实现一个不需要IDL的RPC

当然,首要的是为了有用,其次是挑战自己驾驭 C++ 的能力,目前已经全部完成,并且取得了非常好的效果。使用该 RPC 的简短示例代码:

主要思路就是在 Server 端,用宏生成函数声明和工厂代码,把类注册到工厂中,启动server后,就可以自动接收client端的函数调用了。client发来的函数调用请求会派发到server端的用户定义函数体。当然,client端没有用户定义的函数体。

在client端,同样名字的宏,生成了和server端不同的代码,这些代码生成stub函数,把函数调用的参数序列化到网络。

其中主要使用了boost::tuple,和 boost::any,来生成stub的虚函数。

这个实验很有趣,它说明了C++强大的表达能力,即使没有IDL,仅使用语言本身就可以实现RPC。

作者:
该日志由 rockeet 于2006年12月09日发表在C++序列化分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: 用C++的高级模版特性实现一个不需要IDL的RPC
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

4 个回复

  1. zm0011说道:

    在开发网络通讯程序中很有用,正想自己写一个,竟然百度出来了。顺便看了一下老兄的其它文章,数量不多但水平比较高,而且涉足的领域很多哦,从WIN到LINUX、从C++壳到数据库都有。希望能看到你奉献更多的好东东,谢谢!

  2. whinah说道:

    客气、客气,这个RPC之后我也再没继续深入。打造一个稳定而强大的基础设施需要太大的精力。目前我们使用ICE,有兴趣可以去关心一下。前不久我在boost sandbox 中看到了一个rpc,没细看,估计在参数传递方面和我的设计思想差不多,不过它底层用的是boost.asio。

  3. angkorcn说道:

    思路不错,不过说实话实在不喜欢宏这个东西,带来的问题太多。对于RPC我还是倾向于使用IDL编译,其代码生成能力是没有限制的,类型安全也可以做的更好。宏只是预处理,其代码生成能力一般,类型安全极差。用C++的模板作为代码生成器,能力很差,不过安全性好。除非在0x标准里有新的东西产生,不然还是倾向于IDL。

  4. whinah说道:

    当然,使用 IDL 是普遍的用法,并且已经很成熟。宏,模板,成也萧何,败也萧何,用得好,就一切很OK,用得不好,诡异的行为和漫长的编译很够大家受的。
    任何东西都有它的生存空间,IDL是不错,不但自动化,还是跨语言的,但是数数市面上的IDL,比较主流的就不下几十种,加上那些杂七杂八的,几百种都不止。
    我这个东西做出来两年多了,一直都扔在那里没用,最近做一个小东西,用了一下,效果竟然很好。

发表评论

您必须 登录 后才能发表评论。