博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACE网络编程思考(一)
阅读量:6328 次
发布时间:2019-06-22

本文共 2710 字,大约阅读时间需要 9 分钟。

hot3.png

学之者生,用之者死——ACE历史与简评
陈硕 (giantchen_AT_gmail)
Blog.csdn.net/Solstice
2010 March 10
ACE 是现代面向对象网络编程的鼻祖,确立了许多重要模式,如 Reactor、Acceptor 等,重要到我们甚至觉得网络编程就应该是那样的。但为什么 ACE 叫好不叫座?大名鼎鼎却使用者寥寥?本文谈谈我的个人观点。
ACE 是一套重量级的 C++ 网络库,早期版本由 Douglas Schmidt 独自开发,后来有 也贡献了大量代码。作者 Douglas Schmidt 凭借它发表了 。ACE 的一大特点是融合了 Douglas Schmidt 提出的很多面向对象 ,并且具有不可思议的
1 ACE 历史先说说 ACE 之父 Douglas Schmidt 的 :
  • 1990 年在加州大学 Irvine 分校获计算机硕士学位;
  • 1994 年在同一学校获计算机博士学位,论文《》。从论文内容看,主要工作就是后来大名鼎鼎的 ACE framework,文中叫 ASX framework。
  • 1994 年博士毕业后前往华盛顿大学任助理教授,后升至副教授
  • 2003 年起在 Vanderbilt 大学任正教授至今
我相信 ACE 是 Douglas 在读博期间的主要工作,ACE 这个名字最早出现在 1993 年 12 月的一篇会议论文上,Douglas 的这篇文章获得了“最佳学生论文”奖。在此之前,Douglas 已经用 ASX 等其他名字发表了内容相近的文章。
我能下载到的最早的 ACE 版本是 4.0.32,有大约 86,000 行 C++ 代码,代码的时间戳是 1998 年 10 月 22 日。早期 ACE 由 Douglas Schmidt 个人独立开发,从 ChangeLog 得知,1993 年 11 月 ACE 的版本号是 2.12。到了 1995 年 9 月,才有第一次出现其他开发者。在 1993~1996 年间的 684 次改动中,Douglas 一个人贡献了 529 次,另外几个主要开发者以及他们的修改次数分别是 Prashant Jain (58)、Tim Harrison (42)、David Levine (28)、Irfan Pyarali (20)、Jesper S. M|ller (5)。
从整个 ChangeLog 看,从 1993 年到 2010 年 3 月有 19,000 余次改动。有超过 200 人修改过代码,其中 23 个人的 check-in 次数大于 100,排名前 12 的代码修改者为:
   3635  Johnny Willemsen (活跃年份:2001~今)
   2586  Douglas C. Schmidt(原作者,活跃年份:1993~今)
   1861  Steve Huston (活跃年份:1997~今)
   1197  David L. Levine  (活跃年份:1996~2000)
    962  Nanbor Wang  (活跃年份:1998~2003)
    907  Ossama Othman (活跃年份:1999~2005)
    865  Chad Elliott (活跃年份:2000~今)
    823  Bala Natarajan (活跃年份:1999~2004)
    708  Carlos O'Ryan (活跃年份:1997~2001)
    544  J.T. Conklin (活跃年份:2004~2008)
    479  Irfan Pyarali (活跃年份:1996~2003)
    368  Darrell Brunsch (活跃年份:1997~2001)
看到这些“活跃年份”,你的第一反应是什么?我想到的是,这些人会不会多半是 Douglas 指导的研究生?我猜他们在读研期间参与改进 ACE,把工作内容写成论文发表,然后毕业走人。或许这能解释 ACE 代码风格的多样性。
在浏览代码历史的过程中,我还发现一个很有意思的现象,在 2008 年 3 月 4 日,某人不小心把整个 ACE 的源代码树删除了:
随后又很快恢复:
干这件事情的老兄在 2005~2009 这几年里一共 check in 了 120 余次。你对这件事情怎么看?你们的开发团队里有这样的人吗?
2 事实与思考1. 除了 Douglas Schmidt 和 Stephen Huston 写的三本书籍之外,没有其他专著讲 ACE。究竟是 ACE 太好用了,以至于无需其他书来讲解,还是太难用了,讲也讲不明白?抑或根本就没人在乎?
《 》《 》《 》这三本书先后于 2001、2002、2003 年出版,之后再无更新。在同一时期,同样在网络编程领域,尽管 W. Richard Stevens 在 1999 年去世,他的 UNP 和 APUE 仍然由别人续写了新版。讲 C 语言 Sockets API 的书尚且不断更新,上层封装的 C++ 居然无动于衷?真的是封装到位了,屏蔽了这些变化?
UNP 的可操作性很强,读前面几章,就能上手编写简单的网络程序,看完大半本书,网络编程基本就算入门了,能编写一般应用的网络程序。相反,读完 ACE 那几本书,对于简单的网络编程任务还是感觉无从下手,这是因为书写得不好,还是 ACE 本身不好用?
2. ACE 很难用,非常容易用错我不止听到一个人对我说,他们在项目里尝试过 ACE,不是中途放弃,因为出了问题无法解决;就是勉强交差,并且从下一个项目起坚决不用。我听到的另一个说法是,ACE 教程的例子必须原封不动地抄下来,改一点点就会出漏子。不巧的是,ACE 的例子举来举去就是个 Logging 服务器,让人想照猫画虎也无从下手。在最近的《代码之美》一书中,Douglas Schmidt 再次拿它为例,说明他真的很喜欢这个例子。
用 ACE 编程如履薄冰,生怕在阴沟里翻船,不知道它背后玩了什么把戏。相反,用 10 来个 Sockets 系统调用就能搞定网络编程,我感觉比使用 ACE 难度要小。为什么“高级”工具反而没有低级工具顺手呢?
不好用的直接后果是少有人用,放眼望去,目前涉及网络的 C++ 开源项目里边,鲜有用 ACE 作为通信平台的(我知道的只有 Mangos)。相反,libevent 这个轻量级的 IO multiplexing 库有 memcached 这样的著名用户。

转载于:https://my.oschina.net/zhangjie830621/blog/188218

你可能感兴趣的文章
mysql5.7 不复制多张表
查看>>
apache 2.2.X 修改并发链接数
查看>>
Linux环境安装python3.6(APT方式)
查看>>
纯css九宫格布局排版
查看>>
代码树
查看>>
java-在非安全网络上建立可信任安全的通道(2/3)
查看>>
FTP服务器的安装与配置和总结
查看>>
SVN的使用
查看>>
MySQL分区
查看>>
开源 java CMS - FreeCMS2.8 自定义标签 siteOne
查看>>
jstl 保留两位小数、js String 转float 保留两位小数
查看>>
【leetCode】134. Gas Station-----Java
查看>>
使用websocket的组件socket.io实现最简单的聊天室功能。
查看>>
springmvc 实现注解式权限验证
查看>>
vim的一些命令
查看>>
 企业所面临的问题与挑战
查看>>
iOS开发性能优化的25个tips
查看>>
AP do not regist to WLC
查看>>
keepalived打造mysql主主高可用
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>