用
Java的NIO写网络服务是非常简单的,而且性能和伸缩性都较高。如何用C++也达到这样的效果呢?答案是肯定的。
ACE就可以完成这个任务。ACE是一个重型的网络服务实现方案,也具有跨平台,但毕竟是C++实现,而且它的怪异的命名和高级的模式使它的学习曲线都较高,对于追求高性能的C++实现,这些又算不了什么。
与Java的NIO相比,ACE更进一步,它使用了Reactor模式,将Socket的操作封装在一个个的对象实例中,我们可以不关心Socket操作,而只关心自己的逻辑实现了。ACE也采用了“事件分离”的方法,将对Socket的读和写操作分离到对应的实例中处理。可以达到很高的性能。
下面是服务器端的代码,读取一个文件,并将文件的内容发给到客户端上。和对应的Java例子一样,也是以4K为单位进行传送。在open()函数中注册了写事件。
#include <stdio.h> |
下面是客户端代码,注意:由于open()函数默认注册了读事件,所以在open()中没有做注册事件的动作。
#include <stdio.h> |